分隔串处理方法

场景 方法 示例输入 输出
单字符空格分隔 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]

常见问题处理

  1. 输入包含制表符(\t)或换行符(\n

    \\s+ 替代空格:

    java

    复制代码
    String input = "A\tB\nA";
    String[] array = input.split("\\s+");
  2. 需要统计字符出现次数

    使用 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
去重统计 HashSetHashMap 见方法 4 和统计示例
相关推荐
~木雨6 分钟前
String 底层原理与常量池全解析:byte []+coder、intern 陷阱、substring 内存泄漏,一篇讲透
java·jvm·内存优化·string·字符串常量池
新知图书15 分钟前
12.3 智能体中Skill的约束与自进化实战
java·前端·数据库
风月说与山鬼17 分钟前
四、Tailwind CSS——间距与尺寸
前端·css·tailwind css
en.en..23 分钟前
C语言 static函数与头文件封装规范
java·c语言·前端
计算机魔术师27 分钟前
旅途中用手机远程控制电脑?电脑不在身边,ToDesk/UU远程/TeamViewer移动端深度实测
前端
步行cgn30 分钟前
Spring Boot 项目打包部署详解
java·spring boot·后端
风月说与山鬼41 分钟前
三、Tailwind CSS——排版与文字样式
前端·css·tailwind css
pnoker1 小时前
拆解 IoT DC3:六层微服务架构
java·物联网·spring cloud·微服务·架构
eokred1 小时前
图片预览组件的另一种设计:Headless、可组合、开箱即用
前端·react
cfm_29141 小时前
ThreadLocal 内存泄漏
java·jvm