4.3 String 基础与常用方法
Java 的 String 是保存文本的对象。和 char[] 不同,String 是不可变的:一旦创建,它里面的字符不会被原地修改。看起来像“修改字符串”的方法,其实都会返回一个新字符串。
String name = "Leaflet";字符串下标也从 0 开始,和数组一样。
System.out.println(name.charAt(0)); // L
System.out.println(name.charAt(6)); // tlength()
length() 返回字符串中有多少个字符:
String word = "Java";
System.out.println(word.length()); // 4最后一个合法下标是 word.length() - 1。
char last = word.charAt(word.length() - 1);调用 charAt(word.length()) 会越界。合法下标是 0 到 word.length() - 1。
charAt(index)
charAt(index) 返回某个位置上的字符:
String code = "A17";
char first = code.charAt(0); // 'A'
char last = code.charAt(2); // '7'当你需要逐个检查字符时,charAt 很常用,例如判断编号是否以字母开头,或者统计一行文本里的数字。
substring(begin, end)
substring(begin, end) 返回从 begin 开始、到 end 之前结束的新字符串。
String text = "Leaflet";
String part = text.substring(0, 4); // "Leaf"结束下标不包含在结果里。这让长度很好计算:
String text = "program";
String sub = text.substring(2, 5); // "ogr"
System.out.println(sub.length()); // 3子串从下标 2 开始,在下标 5 之前停止,所以长度是 5 - 2。
也可以只传入 begin:
String text = "filename.txt";
String extension = text.substring(8); // ".txt"isEmpty() 与 isBlank()
isEmpty() 判断字符串长度是否为 0。
"".isEmpty(); // true
" ".isEmpty(); // falseisBlank() 判断字符串是否为空,或者是否只包含空白字符。
"".isBlank(); // true
" ".isBlank(); // true
" Java ".isBlank(); // false当用户输入只有空格也应该算“空”时,使用 isBlank() 更合适。
常用 String 方法总览
Java 的 String 好用,是因为文本本身带着很多方法。下面这张“方法地图”需要先建立起来。后面两个小节会继续用实验器深入练习其中几组方法。
比较字符串
用 equals() 判断文本是否完全相同:
"Java".equals("Java"); // true
"Java".equals("java"); // false如果不希望大小写影响结果,用 equalsIgnoreCase():
"YES".equalsIgnoreCase("yes"); // true如果需要排序或比较先后顺序,用 compareTo():
"apple".compareTo("banana"); // 负数
"cat".compareTo("cat"); // 0
"dog".compareTo("cat"); // 正数compareTo() 的具体数值不重要,重点看符号:负数表示“排在前面”,零表示“相同”,正数表示“排在后面”。
搜索字符串
只需要判断是否包含某段文本时,用 contains():
"error: timeout".contains("error"); // true需要得到第一次出现的位置时,用 indexOf():
"error warning error".indexOf("error"); // 0需要得到最后一次出现的位置时,用 lastIndexOf():
"error warning error".lastIndexOf("error"); // 14如果找不到目标文本,indexOf() 和 lastIndexOf() 都会返回 -1。
检查开头和结尾时,用 startsWith() 与 endsWith():
"Report.java".startsWith("Report"); // true
"Report.java".endsWith(".java"); // true返回新字符串的转换方法
因为 String 不可变,toLowerCase()、toUpperCase()、trim()、strip()、replace() 这类方法都会返回新字符串。
String raw = " Java Basics ";
String lower = raw.toLowerCase(); // " java basics "
String upper = raw.toUpperCase(); // " JAVA BASICS "
String clean = raw.trim(); // "Java Basics"
String modernClean = raw.strip(); // "Java Basics"
String dashed = clean.replace(" ", "-"); // "Java-Basics"比较用户输入前,常常先用 trim() 或 strip() 清理两端空白。命令不区分大小写时,常常先用 toLowerCase() 统一格式。
拆分与连接
split() 会把字符串切成 String[] 数组:
String line = "java,arrays,strings";
String[] parts = line.split(",");String.join() 会把一组字符串重新连接起来:
String label = String.join(" / ", parts);
System.out.println(label); // java / arrays / strings这组方法很适合小型文本处理任务:读取一行,拆成片段,清理每个片段,再把结果重新连接后输出。