java 字符串

  • String 

  • java定义好的类,不需要导包
  • java中所有的字符串文字("abcde")都被视为此类的对象
  • 字符串不可变,创建后值不能更改

  创建字符串

  • 使用最多的,直接赋值    字符串在串池(堆内存)是否存在   字符串重复地址值一样
String s = "abc";
  • 传递一个字符数组,根据字符数组创建新的字符串对象 每次new都在堆开辟新空间地址值不同
        字符串转成字符数组,再拼接
String str = "abc";
char[] arr = str.toCharArray();  //字符串转成字符数组 ['a','b','c']
String s = new String(arr); //abc
  • 传递一个字节数组,根据字节数组创建新的字符串对象
    • 网络中传输的数据都是字节数据,将字节数据转成字符串
byte[] bytes = {97,98,99};  //ASCII表
String s = new String(bytes); //abc

常用方法

比较  

  • ==号比较

基本数据类型  ==  比较的是数据值

引用数据类型  ==  比较的是地址值  new 字符串 地址值不同 直接赋值,相同内容地址值相同

键盘录入的字符串 是new出来的

  • 比较字符串内容是否相等   equals()     
boolean res = s1.equals(s2);   
  • 比较字符串内容是否相等   英文忽略大小写   equalsIgnoreCase()
boolean res = s1.equalIgnoreCase(s2);

遍历

键盘录入字符串,遍历每个字符

比较字符大小
Scanner sc = new Scanner(System.in);
String str = sc.next();  //ctrl+alt+v 自动生成左边

//遍历
for(int i=0;i<str.length();i++){
    char ch = str.charAt(i);  // i  字符串的索引

    //比较大小
    if( ch >= 'a' && ch <= 'z' ){
        //小写字母
    }else if( ch >= 'A' && ch <= 'Z' ){
        //大写字母
    }
    else if( ch >= '0' && ch <= '9' ){
        //数字
    }
}

字符串反转

import java.util.Scanner;

public class ReverseString {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        String res = reverser(str);
        System.out.println(res);
    }
    public static String reverser(String s){
        String res = "";
        for(int i = s.length()-1;i>=0;i--){   //倒着遍历
            char c = s.charAt(i); //得到每个字符
            res = res+c;  //拼接成字符串
        }
        return res;
    }
}

截取字符串 

String substring(int beginIndex,int endIndex)    //包头不包尾

String substring(int beginIndex)  //截取到末尾

//返回值是截取之后的,原字符串没有变化
字符转成整数
char gender = id.charAt(16); //获取身份证第17位的字符

//利用ASCII码转换
'0' ---> 48
'1' ---> 49 
····
'9' ---> 57

int num = gender - 48;  //字符转整数

替换

String s = "";
//TMD 替换成 ***
String res = s.replace("TMD","***");

StringBuilder

看成一个容器,创建后内容可变

构造方法  //   空参构造  含参构造

方法 

  • append(任意类型)   添加数据,并返回对象本身
  • reverse() 反转容器中的内容
  • length() 返回长度
  • toString()  实现把StringBuilder 转换为String
//创建对象
StringBuilder sb = new StringBuilder("abc");

sb.append(1);   //abc1

sb.reverse();   //反转后还是保存在sb中

int len = sb.length();

System.out.println(sb); //打印StringBuilder对象 不是打印地址值而是属性值(内容)

String st = sb.toString();

System.out.println(st);

sb.append(1).toString();//链式编程 根据调用完返回的对象类型可以接着调用其他方法

StringBuilder 使用场景:

  • 字符串拼接
  • 字符串反转

对称字符串

import java.util.Scanner;

public class Symmetry {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        //链式编程
        String rStr = new StringBuilder().append(str).reverse().toString();
        if(str.equals(rStr)){
            System.out.println("str is symmetric");
        }else{
            System.out.println("str is not symmetric");
        }
    }
}

StringJoiner    拼接字符串

构造方法 两种含参构造

创建对象

StringJoiner sj = new StringJoiner(间隔符号);
//制定拼接时的间隔符号 如 ","

StringJoiner sj = new StringJoiner(间隔符号,开始符号,结束符号)
//如 ("," , "[" , "]" )

方法

sj.add("abc");//添加元素,只能添加字符串

sj.length();  //所有字符的长度 

sj.toString(); //转成字符串类型

字符串原理

字符串拼接底层原理

  • 如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池中的字符串
  • 如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存。

StringBuilder提高效率原理

  • 所有要拼接的内容都会放到StringBuilder,不会创建多余无用空间,节约内存

StringBuilder扩容

  • 默认创建长度16的字节数组   //16 容量   sb.capacity();
  • 添加的内容长度小于16,直接存
  • 添加的内容大于16,扩容(16*2+2)
  • 添加的内容大于(16*2+2),以实际长度为准

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值