--- title: "00-字符串" created: 2025-12-02 tags: - 项目 aliases: - 字符串 --- # 字符串 ## String类 初始化: ```java 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 ``` 只读变量,不能修改,例如: ```java String a = "Hello "; a += "World"; // 会构造一个新的字符串 ``` 访问String中的字符: ```java 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 ```java 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来判断。 ## 练习题 [[04-字符串长度|字符串长度]] [[03-只出现一次的字符|只出现一次的字符]] [[02-单词替换|单词替换]] [[01-倒排单词|倒排单词]] [[05-最长公共字符串后缀|最长公共字符串后缀]] --- **项目分区导航**: [[05-蛇形矩阵|蛇形矩阵]] ⬅️ | 00-字符串 | ➡️ [[01-倒排单词|倒排单词]]