分隔串处理方法
场景 | 方法 | 示例输入 | 输出 |
---|---|---|---|
单字符空格分隔 | strArray[i].charAt(0) | "A B A" | ['A', 'B', 'A'] |
多字符合并 | String.join() | "AA B C" | ['A', 'A', 'B', 'C'] |
严格单字符校验 | 检查strArray[i].length()==1 | "A BB" | 抛出异常或跳过 |
1. trim()
方法
功能
移除字符串首尾的空白字符(包括空格、制表符
\t
、换行符\n
等)。不处理字符串内部的空白符。
语法
java
String trimmedString = originalString.trim();
示例
java
String str = " Hello World "; System.out.println(str.trim()); // 输出: "Hello World"(仅去首尾空格)
特点
简单高效:仅处理字符串两端。
不可定制:只能移除 Unicode 值 ≤ 32 的空白字符。
2. split()
方法
功能
按指定正则表达式分割字符串,返回字符串数组。
常用于按分隔符(如空格、逗号)拆分字符串。
语法
java
String[] parts = originalString.split(regex);
示例
java
String str = "A,B,C"; String[] parts = str.split(","); // 输出: ["A", "B", "C"]
进阶用法
正则表达式支持:
java
String str = "A B C"; String[] parts = str.split("\\s+"); // 按一个或多个空格分割: ["A", "B", "C"]
限制分割次数:
java
String str = "A-B-C-D"; String[] parts = str.split("-", 2); // 只分割一次: ["A", "B-C-D"]
3. 核心区别
特性 | trim() | split() |
---|---|---|
作用目标 | 字符串首尾空白符 | 按分隔符拆分字符串 |
返回值 | 新字符串 | 字符串数组 |
是否支持正则 | 否 | 是 |
处理内部内容 | 不处理 | 可处理 |
复杂度 | O(n)(n为字符串长度) | O(n) + 正则匹配开销 |
trim()
:简单清理字符串边界空白。split()
:灵活拆分字符串,功能强大但需注意正则开销。联合使用:
trim().split()
是处理用户输入的经典组合。
4. 常见联合使用场景
清理输入后分割
java
String input = " A, B , C "; String[] parts = input.trim().split("\\s*,\\s*"); // 1. 先trim()去首尾空格 → "A, B , C" // 2. 分割并按逗号+可选空格拆分 → ["A", "B", "C"]
5. 常见误区
误区 1:误用 trim()
清理所有空格
java
// 错误:无法移除字符串中间空格 String str = "A B C"; System.out.println(str.trim()); // 输出仍为 "A B C"// 正确:用split()+join() String[] parts = str.split("\\s+"); String cleaned = String.join("", parts); // "ABC"
误区 2:忽略 split()
的空字符串结果
java
String str = "A,,B"; String[] parts = str.split(","); // ["A", "", "B"] // 若需过滤空字符串: parts = Arrays.stream(str.split(",")).filter(s -> !s.isEmpty()).toArray(String[]::new); // ["A", "B"]
字符串分割
方法 1:直接使用 split(" ")
分割
java
String input = "A A B A A A"; String[] array = input.split(" "); // 按空格分割 System.out.println(Arrays.toString(array)); // [A, A, B, A, A, A]
方法 2:处理多个连续空格
如果输入可能有多个连续空格(如 A B A
),用正则表达式 \\s+
分割:
java
String input = "A B A"; String[] array = input.split("\\s+"); // 按一个或多个空格分割 System.out.println(Arrays.toString(array)); // [A, B, A]
方法 3:从控制台读取输入
java
import java.util.Scanner; import java.util.Arrays;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.print("输入字符串(用空格分隔,如 A A B A): ");String input = scanner.nextLine();String[] array = input.split("\\s+");System.out.println("解析结果: " + Arrays.toString(array));} }
输入示例:
text
A A B A A A
输出:
text
[A, A, B, A, A, A]
方法 4:转换为 List 或 Set
如果需要更灵活的操作,可以转换为集合:
java
import java.util.*;String input = "A A B A A A"; List<String> list = Arrays.asList(input.split(" ")); Set<String> set = new HashSet<>(list); // 去重System.out.println("List: " + list); // [A, A, B, A, A, A] System.out.println("Set: " + set); // [A, B](去重后)
方法 5:过滤空字符串
如果分割后可能产生空字符串(如输入首尾有空格),可以过滤:
java
String input = " A A B A A A "; String[] array = Arrays.stream(input.split(" ")).filter(s -> !s.isEmpty()).toArray(String[]::new);System.out.println(Arrays.toString(array)); // [A, A, B, A, A, A]
常见问题处理
输入包含制表符(
\t
)或换行符(\n
)
用\\s+
替代空格:java
String input = "A\tB\nA"; String[] array = input.split("\\s+");
需要统计字符出现次数
使用HashMap
:java
String input = "A A B A A A"; Map<String, Integer> countMap = new HashMap<>(); for (String s : input.split(" ")) {countMap.put(s, countMap.getOrDefault(s, 0) + 1); } System.out.println(countMap); // {A=5, B=1}
总结
场景 | 推荐方法 | 代码示例 |
---|---|---|
简单空格分隔 | input.split(" ") | "A A B".split(" ") |
多个连续空格/制表符 | input.split("\\s+") | "A B".split("\\s+") |
从控制台读取 | Scanner.nextLine() + split() | 见方法 3 |
去重统计 | HashSet 或 HashMap | 见方法 4 和统计示例 |