UM2L11——String

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
string.equals()                    //对比字符串的值是否相同
string.equalsIgnoreCase() //对比字符串的忽略大小写的值是否相同
string.length() //获取字符串长度
string.indexOf() //正向查找字符串中的某个字符或字符串,返回其索引,不存在返回-1
string.lastIndexOf() //反向查找字符串中的某个字符或字符串,返回其索引,不存在返回-1
string.charAt() //通过索引获取某个字符串
string.substring() //截取子字符串,左包含又不包含
string.trim() //删除字符串左右两边的空格
string.replace() //字符串替换
string.startsWith() //查询字符串是否有某种前缀
string.endsWith() //查询字符串是否有某种后缀
string.toLowerCase() //将字符串转为全小写
string.toUpperCase() //将字符串转为全大写
string.split() //分割字符串
String.format() //格式化字符串

String

Java中String​在使用上和C#类似,但是需要注意以下两点区别

  1. 直接赋值字符串,如果字符串相同,则指向同一引用,new String​,即使字符串相同引用也不同
  2. Java中字符串比较使用equals​,用==​号是比较的引用地址

字符串声明方法

  1. 直接赋值字符串,注意:如果字符串相同,那么他们指向同一实体,在公共内存区域

    1
    2
    3
    4
    5
    6
    7
    String s1 = "唐老狮";
    String s2 = "唐老狮";
    if (s1 == s2) {
    System.out.println("同一地址");
    }
    else
    System.out.println("不同地址");

    输出:

    1
    同一地址
  2. new String()​,注意:使用new​,即使字符串相同也是不同实体

    1
    2
    3
    4
    5
    6
    7
    String s3 = new String("唐老狮");
    String s4 = new String("唐老狮");
    if (s3 == s4) {
    System.out.println("同一地址");
    }
    else
    System.out.println("不同地址");

    输出:

    1
    不同地址

    使用构造函数实例化字符串,还可以使用重载,例如将字符数组转为字符串

    1
    2
    3
    char[] chars = { 'a', 'b', 'c' };
    String s5 = new String(chars);
    System.out.println(s5);

    输出:

    1
    abc

字符串拼接

Java中字符串拼接规则和C#中相同,通过+​即可拼接
拼接时并不是修改原String​,而会生成新的String​,和C#中规则相同

1
2
3
String s1 = "唐老狮";
s1 = s1 + "123" + 1 + 1.2f;
System.out.println(s1);

输出

1
唐老狮12311.2

String中常用方法

  1. 判断字符串是否相等

    注意!因为Java中没有运算符重载,所以==​在Java里是用来判断变量引用地址是否相同,也就是判断两个变量是否指向一个对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    String s1 = "唐老狮";
    String s2 = "唐老狮";
    if (s1 == s2) {
    System.out.println("同一地址");
    }
    else
    System.out.println("不同地址");
    String s3 = new String("唐老狮");
    String s4 = new String("唐老狮");
    if (s3 == s4) {
    System.out.println("同一地址");
    }
    else
    System.out.println("不同地址");

    输出:

    1
    2
    同一地址
    不同地址

    String​ 之间进行判断字符串内容是否相等,需要使用 equals​ 方法,还有一个不区分大小写的 equalsIgnoreCase​ 方法

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    String s3 = new String("唐老狮");
    String s4 = new String("唐老狮");
    if (s3.equals(s4))
    {
    System.out.println("s3和s4的字符串相等");
    }
    String s6 = new String("ABC");
    String s7 = new String("abc");
    if (s6.equalsIgnoreCase(s7))
    {
    System.out.println("忽略大小写的判断字符串是否相等");
    }

    输出:

    1
    2
    s3和s4的字符串相等
    忽略大小写的判断字符串是否相等
  2. 长度

    方法是string.length()​,由于Java没有属性,因此需要加括号

    1
    2
    String s1 = "唐老狮12311.2";
    System.out.println(s1.length());
  3. 正向查找

    从头查找字符串中包含传入内容的索引,若不存在返回-1

    1
    2
    3
    4
    5
    String s1 = "唐老狮12311.2";
    System.out.println(s1.indexOf("唐"));
    System.out.println(s1.indexOf("老"));
    System.out.println(s1.indexOf("老狮"));
    System.out.println(s1.indexOf("A"));

    输出:

    1
    2
    3
    4
    0
    1
    1
    -1
  4. 反向查找

    从尾部查找字符串中包含传入内容的索引,若不存在返回-1

    1
    2
    3
    s1 = "A唐老狮A";
    System.out.println(s1.indexOf("A"));
    System.out.println(s1.lastIndexOf("A"));

    输出:

    1
    2
    0
    4
  5. 获取指定索引处字符

    由于Java没有索引器,因此获取索引处的字符需要使用方法charAt()

    1
    2
    s1 = "A唐老狮A";
    System.out.println(s1.charAt(1));

    输出:

    1

  6. 获取子字符串

    注意!截取是左包含右不包含的!

    1
    2
    3
    s1 = "A唐老狮A";
    System.out.println(s1.substring(2));
    System.out.println(s1.substring(2, 4));

    输出:

    1
    2
    老狮A
    老狮
  7. 去除首尾空格

    不会去除中间字符串的空格

    1
    2
    3
    String s8 = "   123 123 123   ";
    System.out.println(s8);
    System.out.println(s8.trim());

    输出:

    1
    2
       123 123 123   
    123 123 123
  8. 字符串替换

    注意,该方法会生成一个新的字符串对象,而不是在原有的对象上修改

    1
    2
    String s8 = "   123 123 123   ";
    System.out.println(s8.replace('1', 'A'));

    输出:

    1
    A23 A23 A23   
  9. 判断字符串开始和结尾

    判断一个字符串的开始或者结尾是否为传入的字符串,一般用来确认一个字符串的前缀或者后缀

    1
    2
    3
    4
    5
    String s9 = "222333.txt";
    System.out.println(s9.startsWith("222"));
    System.out.println(s9.startsWith("333"));
    System.out.println(s9.endsWith(".txt"));
    System.out.println(s9.endsWith(".png"));

    输出:

    1
    2
    3
    4
    true
    false
    true
    false
  10. 大小写转换

    1
    2
    3
    4
    String s10 = "AAAABBB";
    System.out.println(s10.toLowerCase());
    String s11 = "ccccddd";
    System.out.println(s11.toUpperCase());

    输出:

    1
    2
    aaaabbb
    CCCCDDD
  11. 字符串分割

    1
    2
    3
    4
    5
    String s12 = "123,345,678,123";
    String[] strs = s12.split(",");
    for (String s : strs) {
    System.out.println(s);
    }

    输出:

    1
    2
    3
    4
    123
    345
    678
    123
  12. 字符串格式化

    Java的字符串格式化和C#不同,它是通过使用类似于C的占位符来实现格式化

    1
    2
    3
    4
    boolean b = true;
    Date date = new Date();
    String string = String.format("%b, %tF", b, date);
    System.out.println(string);

    输出:

    1
    true, 2024-04-01

    不同占位符对应的格式化内容如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    %b、%B:    boolean类型格式化符号
    %s、%S: String类型格式化符号
    %c、%C: char类型格式化符号
    %d: 十进制数格式化符号
    %o: 八进制数格式化符号
    %x、%X: 十六进制数格式化符号
    %e: 十进制数的科学计数法格式化符号
    %tF: 年-月-日 时间格式
    %tD: 月/日/年 时间格式
    %tc: 全部日期和时间信息
    %tr: 时:分:秒 PM(AM) 时间格式
    %tT: 时:分:秒 24小时制 时间格式
    %tR: 时:分 24小时制 时间格式