分隔串处理方法

场景 方法 示例输入 输出
单字符空格分隔 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 和统计示例
相关推荐
bjdnlsj12 小时前
【MAC环境】安装多个 JDK
java·开发语言·macos
Mike_jia12 小时前
RustFS:国产高性能对象存储新标杆,全面替代MinIO的优雅方案
前端
RainbowSea12 小时前
6. Advisor 对话拦截
java·spring·ai编程
间彧12 小时前
lock.isHeldByCurrentThread详解与应用
java
小小王app小程序开发12 小时前
废品回收小程序:从 “扔垃圾“ 到 “变资源“ 的体验革命
java·开发语言·小程序
间彧12 小时前
在多线程调试中,如何结合isHeldByCurrentThread()方法快速定位死锁问题?
java
没有bug.的程序员12 小时前
ShardingSphere 与分库分表:分布式数据库中间件实战指南
java·数据库·分布式·中间件·分布式数据库·shardingsphere·分库分表
2301_7813925212 小时前
提高前端开发效率的利器:VUE常用组件及应用
前端·javascript·vue.js
golang学习记12 小时前
VS Code 2025 最强“黑科技”特性:效率直接拉满!
前端
Mintopia12 小时前
📘 领域适配 AIGC:垂直行业 Web 应用的微调技术实践
前端·aigc·ai编程