String类

String类

String类基础

  1. 代表字符串,使用一对“”引起来表示
  2. 声明为final类,不可被继承
  3. String实现的接口
    • Serializable接口:表示字符串是支持序列化的
    • Comparable接口:表示String可以比较大小
  4. String内部定义了final char[] value用于存储字符串数据
  5. String代表一个不可变的字符序列(不可变性)
    • 通过字面量的方式(区别于new方式)给一个字符串复制,此时的字符串值声明在字符串常量池中
    • 字符串常量池中是不会存储相同内容的字符串的
    • 体现
      • 当对字符串重新赋值时,需要重新指定内存区域赋值,不能使用原有的value进行赋值
      • 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能在原有的value进行赋值
      • 当调用String.replace()方法修改指定的字符或字符串时,也必须重新指定内存区域赋值
  6. String实例化方式
    • 通过字面量定义的方式
    • 通过new + 构造器的方式
      • 变量保存的是地址值,是数据在堆空间中开辟空间以后对应的地址值
  7. String字符串拼接
    • 常量与常量的拼接结果在常量池,且常量池中不会存在相同内容的常量
    • 只要有一个是变量,结果就在堆中
    • ⭕如果拼接的结果调用intern()方法,返回值就在常量池中

String类常用方法

  1. s.length():返回字符串的长度

    String s = "abcdefg";//7
    System.out.println(s.length());
    
  2. s.charAt(int index) :返回某索引处的字符

    index属于数组长度范围

    String s = "abcdefg";
    System.out.println(s.charAt(3));//d
    
  3. s.isEmpty():判断是否是空字符串

    String s = "abcdefg";
    System.out.println(s.isEmpty());//false
    
  4. s.toLowerCase():将String中的所有字符转换为小写

    String s = "ABCDEFG";
    System.out.println(s.toLowerCase());//abcdefg
    
  5. s.toUpperCase():将String中的所有字符转换为大写

    String s = "abcdefg";
    System.out.println(s.toUpperCase());//ABCDEFG
    
  6. s.trim():返回字符串副本,忽略前导空白和尾部空白

    String s = "  ASDF GJ  ";
    System.out.println(s.trim());//ASDF GJ
    
  7. equals():比较字符串的内容是否相等

  8. s1.equalsIgnoreCase(s2):忽略大小写比较两者是否相等

    String s1 = "asdfg";
    String s2 = "ASDFG";
    System.out.println(s1.equalsIgnoreCase(s2));//true
    
  9. s1.concat("s2"):将指定字符串连接到此字符串的结尾,相当于用“+”

    String s1 = "qwert";
    System.out.println(s1.concat("+mnb"));//qwert+mnb
    
  10. s1.compareTo(s2):比较两个字符串的大小(无论哪种方式建的字符串都可以)

    • 涉及到字符串排序
    • 结果为负数代表前者小
    • 结果为0代表两者相同
    String s1 = "asd";
    String s2 = "cvb";
    System.out.println(s1.compareTo(s2));//-2
    
  11. String s2 = s16.substring(int index):返回一个新的字符串,它是此字符串从index开始截取到最后一个字符串

    String s1 = "克里斯马殷阁下";
    System.out.println(s1.substring(4));//殷阁下
    
  12. String s2 = s1.substring(int beginIndex, int endIndex):返回一个新的字符串,它是从beginIndex开始截取到endIndex(不包含)的一个子字符串(左闭右开)

    String s1 = "克里斯马殷阁下";
    System.out.println(s1.substring(0,4));//克里斯马
    
  13. boolean b = s1.endsWith(String suffix) :测试此字符串是否以指定的后缀结束

    String s = "asdfg";
    System.out.println(s.endsWith("g"));//true
    
  14. boolean b = s1.startsWith(String suffix):测试此字符串是否以指定的前缀开始

    String s = "asdfg";
    System.out.println(s.startsWith("a"));//true
    
  15. boolean b = s.startsWith(prefix,toffset):测试此字符串从指定的索引开始的子字符串是否与指定前缀开始

    String s = "asdfg";
    System.out.println(s.startsWith("df", 2));//true
    
  16. s1.contains(s2):此字符串包含指定的char值序列时,返回true

    String s = "asdfg";
        System.out.println(s.contains("sdf"));//true
        System.out.println(s.contains("sf"));//false
    
  17. s.indexOf(String str):返回指定子字符串中第一次出现处的索引,不存在出现-1

    String s = "asdfg";
    System.out.println(s.indexOf("d"));//2
    System.out.println(s.indexOf("b"));//-1
    
  18. s.indexOf(str,fromIndex):返回指定子字符串在此字符串中第一次出现的索引,从fromIndex开始查找

    String s = "asdfgasdfg";
    System.out.println(s.indexOf("d", 5));//7
    
  19. s.lastIndexOf(String str):返回指定的子字符串在此字符串中最右边出现处的索引(还是从前向后找,返回的索引也是从前往后数的索引)

    String s = "asdfgasdfg";
    System.out.println(s.lastIndexOf("f"));//8
    
    • 什么情况indexOf(str)和lastIndexOf(str)返回值相同?
      • str中的元素都只存在一个
      • 不存在str
  20. str.lastIndexOf(str,fromIndex):返回指定的子字符串中最后一次出现处的索引,从指定的索引开始反向搜索(返回的索引值还是从前往后找得到的索引)

    String s = "asdfgasdfg";
    System.out.println(s.lastIndexOf("g", 5));//4
    
  21. s.replace(oldchar,newchar):返回一个新的字符串,用newchar替换oldchar(替换字符)

    String s = "asdfgasdfg";
    String replace = s.replace("as", "bn");
    System.out.println(replace);//bndfgbndfg
    
  22. s.replace(target, replacement):返回一个新的字符串,replacement替换target

    String s = "最好的队长殷志源";
    String replace = s.replace("最好的队长", "丸子");
    System.out.println(replace);//丸子殷志源
    

String与其他类型数据的转换

String与基本数据类型转换

  • String类型---->包装类类型:调用包装类的parseXXX()方法
    String s = "123";
    int i = Integer.parseInt(s);
    System.out.println(i);//123
    
  • 包装类类型---->String类型:调用String类的valueOf()方法
    double d = 2.6;
    String s = String.valueOf(d);
    System.out.println(s);
    

String类型与char[]类型转换

  • String类型---->char[]类型:调用String的toCharArray()方法
    String s = "abc";
    char[] c = s.toCharArray();
    System.out.println(Arrays.toString(c));//[a, b, c]
    
  • char[]类型---->String类型:调用String构造器
    char[] c = new char[]{'a','b','c'};
    String s = new String(c);
    System.out.println(s);//abc
    

String与byte[]类型转换

  • String类型---->byte[]转换:调用String的getBytes()方法

    • 使用utf-8进行编码
      String s  = "殷志源123";
      byte[] b = s.getBytes();
      System.out.println(Arrays.toString(b));//[-26, -82, -73, -27, -65, -105, -26, -70, -112, 49, 50, 51]
      
    • 使用gbk字符集进行编码
      String s  = "殷志源123";
      byte[] b = s.getBytes("gbk");
      System.out.println(Arrays.toString(b));//[-46, -13, -42, -66, -44, -76, 49, 50, 51]
      

    编码:字符串--->字节(能看的懂转换为看不懂的(计算机底层的二进制数据))

    解码:字节------->字符串(编码的逆过程)

  • byte[]类型---->String类型转换:调用String的构造器

    在解码时,要求解码使用的解码集必须与编码时使用的字符集一致,否则会出现乱码

    String s  = "殷志源123";
    byte[] b1 = s.getBytes();
    System.out.println(Arrays.toString(b1));//[-26, -82, -73, -27, -65, -105, -26, -70, -112, 49, 50, 51]
    String s1 = new String(b1);
    System.out.println(s1);//殷志源123
    

你可能感兴趣的:(String类)