字符串

String类

初始化:

String a = "Hello World";
String b = "My name is";
String x = b;  // 存储到了相同地址
String c = b + "yxc";  // String可以通过加号拼接
String d = "My age is " + 18;  // int会被隐式转化成字符串"18"
String str = String.format("My age is %d", 18);  // 格式化字符串,类似于C++中的sprintf
String money_str = "123.45";
double money = Double.parseDouble(money_str);  // String转double

只读变量,不能修改,例如:

String a = "Hello ";
a += "World";  // 会构造一个新的字符串

访问String中的字符:

String str = "Hello World";
for (int i = 0; i < str.length(); i ++ ) {
   System.out.print(str.charAt(i));  // 只能读取,不能写入
}

(、不能同c中一样 用数组形式遍历)

常用API:

  • length():返回长度
  • split(String regex):分割字符串
  • indexOf(char c)、indexOf(String str):查找,找不到返回-1
  • equals():判断两个字符串是否相等,注意不能直接用==
  • compareTo():判断两个字符串的字典序大小,负数表示小于,0表示相等,正数表示大于
  • startsWith():判断是否以某个前缀开头
  • endsWith():判断是否以某个后缀结尾
  • trim():去掉首尾的空白字符
  • toLowerCase():全部用小写字符
  • toUpperCase():全部用大写字符
  • replace(char oldChar, char newChar):替换字符
  • replace(String oldRegex, String newRegex):替换字符串
  • substring(int beginIndex, int endIndex):返回[beginIndex,
  • endIndex)中的子串

StringBuilder、StringBuffer

String不能被修改,如果打算修改字符串,可以使用StringBuilder和StringBuffer

StringBuffer线程安全,速度较慢;StringBuilder线程不安全,速度较快。

StringBuilder sb = new StringBuilder("Hello ");  // 初始化
sb.append("World");  // 拼接字符串
System.out.println(sb);

for (int i = 0; i < sb.length(); i ++ ) {
   sb.setCharAt(i, (char)(sb.charAt(i) + 1));  // 读取和写入字符
}

System.out.println(sb);

常用API:

reverse():翻转字符串

java中字符数组就是字符数组,string是字符串;但是c++中字符数组也可以是字符串

不能用“==”判断两个字符串是否相等,需要用API–equals来判断。

练习题

字符串长度 只出现一次的字符

单词替换 倒排单词 最长公共字符串后缀


项目分区导航蛇形矩阵 ⬅️ | 00-字符串 | ➡️ 倒排单词