当前位置: 首页 > news >正文

分隔串处理方法

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

http://www.dtcms.com/a/318672.html

相关文章:

  • SQL注入SQLi-LABS 靶场less51-57详细通关攻略
  • 【2026版】JVM面试题
  • K8S的POD数量限制
  • 敏捷协作平台推荐:Jira、PingCode、Tapd等15款
  • C++ - 仿 RabbitMQ 实现消息队列--网络通信协议设计
  • 力扣-42.接雨水
  • 云平台托管集群:EKS、GKE、AKS 深度解析与选型指南-第二章
  • java 桌面应用程序基本框架
  • 【算法训练营Day21】回溯算法part3
  • C语言:指针(1-2)
  • 亚马逊新品实现快速起量:如何设置有效的广告竞价策略
  • Java保姆级新手教程第三章(方法与数组)
  • 亚马逊广告进阶指南:广告转化的基本原理
  • 前端性能优化实战:电商首页从 10s 加载到 1s 的踩坑与复盘
  • 大数据存储域——HDFS存储系统
  • 在LLM小型化趋势下,AI Infra需要做出哪些相应调整?
  • 用 “私房钱” 类比闭包:为啥它能访问外部变量?
  • 日记研究:一种深入了解用户真实体验的UX研究方法
  • 【2025CVPR-目标检测方向】FIRE:通过频率引导重建误差对扩散生成的图像进行鲁棒检测
  • 2025AI论文工具测评?个人实测5款AI工具论文写作使用体验对比
  • 【pytorch(02)】Tensor(张量)概述、如何创建、常见属性,切换设备
  • 【0基础PS】PS工具详解--直接选择工具
  • TypeScript 数组类型精简知识点
  • 文本编码扫盲及设计思路总结
  • Mongodb入门介绍
  • [Python 基础课程]学生语文成绩录入和查询需求
  • [假面骑士] 555浅谈
  • AI大语言模型如何重塑软件开发与测试流程
  • Linux操作系统启动项相关研究与总结
  • 高速信号设计之 UPI2.0 篇