分隔串处理方法

发布于:2025-08-07 ⋅ 阅读:(13) ⋅ 点赞:(0)
场景 方法 示例输入 输出
单字符空格分隔 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
去重统计 HashSet 或 HashMap 见方法 4 和统计示例


网站公告

今日签到

点亮在社区的每一天
去签到