从String中移除空白字符的多种方式

article/2025/8/17 16:17:03

字符串,是Java中最常用的一个数据类型了。我们在日常开发时候会经常使用字符串做很多的操作。比如字符串的拼接、截断、替换等。

这一篇文章,我们介绍一个比较常见又容易被忽略的一个操作,那就是移除字符串中的空格。

其实,在Java中从字符串中删除空格有很多不同的方法,如trim,replaceAll等。但是,在Java 11添加了一些新的功能,如strip、stripLeading、stripTrailing等。

大多数时候,我们只是使用trim方法来删除多余的空格。但是好像很多人并没有去思考过,是否有更好的方式呢?

当然,trim()在大多数情况下都工作得很好,但是Java中有许多不同的方法。每一种都有自己的优点和缺点。我们如何决定哪种方法最适合我们呢?

接下来我们将介绍几种方法,并对比下他们的区别和优缺点等。

在java中从字符串中删除空格的不同方法

首先,我们来看一下,想要从String中移除空格部分,有多少种方法,作者根据经验,总结了以下7种(JDK原生自带的方法,不包含第三方工具类库中的类似方法):

  • trim() : 删除字符串开头和结尾的空格。
  • strip() : 删除字符串开头和结尾的空格。
  • stripLeading() : 只删除字符串开头的空格
  • stripTrailing() : 只删除字符串的结尾的空格
  • replace() : 用新字符替换所有目标字符
  • replaceAll() : 将所有匹配的字符替换为新字符。此方法将正则表达式作为输入,以标识需要替换的目标子字符串
  • replaceFirst() : 仅将目标子字符串的第一次出现的字符替换为新的字符串

需要注意的最重要的一点是,在Java中String对象是不可变的,这意味着我们不能修改字符串,因此以上所有的方法我们得到的都是一个新的字符串。

接下啦,我们分别针对以上这几个方法学习下用法,了解下其特性。

trim

trim()是Java开发人员最常用的删除字符串开头和结尾的空格方法。其用法也比较简单:

public class StringTest {    public static void main(String[] args) {        String stringWithSpace = "   Hollis   Is   A   Java   Coder   ";        StringTest.trimTest(stringWithSpace);    }    private static void trimTest(String stringWithSpace){        System.out.println("Before trim : \'" + stringWithSpace + "\'");        String stringAfterTrim = stringWithSpace.trim();        System.out.println("After trim : \'" + stringAfterTrim + "\'");    }}复制代码

输出结果:

Before trim : '   Hollis   Is   A   Java   Coder   'After trim : 'Hollis   Is   A   Java   Coder'复制代码

如上,使用trim之后,原字符串中开头和结尾部分的空格内容都被移除掉了。

但是不知道大家有没有思考过,trim方法移除的空白内容都包含哪些东西?除了空格以外,还有其他的字符吗?

其实,trim移除的空白字符指的是指ASCII值小于或等于32的任何字符(' U+0020 ')

 

其中包含了空格、换行、退格等字符。

strip()

不知道大家有没有注意到,在Java 11的发行版中,添加了新的strip()方法来删除字符串中的前导和末尾空格。

已经有了一个trim方法,为什么还要新增一个strip呢?

这其实是是因为trim方法只能针对ASCII值小于等于32的字符进行移除,但是根据Unicode标准,除了ASCII中的字符以外,还是有很多其他的空白字符的。

而且为了识别这些空格字符,从Java 1.5开始,还在Character类中添加了新的isWhitespace(int)方法。该方法使用unicode来标识空格字符。你可以在jkorpela.fi/chars/space… 了解更多关于unicode空格字符的信息。

 而在Java 11中新增的这个strip方法就是使用这个Character.isWhitespace(int)方法来判断是否为空白字符并删除它们的:

 

 

下面我们来看一个使用strip例子:

public class StringTest {    public static void main(String args[]) {      String stringWithSpace ='\u2001' + "  Hollis   Is   A   Java   Coder  " + '\u2001';        System.out.println("'" + '\u2001' + "' is space : " +  Character.isWhitespace('\u2001'));        StringTest.stripTest(stringWithSpace);    }    private static void stripTest(String stringWithSpace){        System.out.println("Before strip : \'" + stringWithSpace + "\'");        String stringAfterTrim = stringWithSpace.strip();        System.out.println("After strip : \'" + stringAfterTrim + "\'");    }}

我们在字符串前后都增加了一个特殊的字符\u2001,这个字符是不在ASCII中的,经过Character.isWhitespace判断他是一个空白字符。然后使用strip进行处理,输出结果如下:

' ' is space : trueBefore strip : '   Hollis   Is   A   Java   Coder   'After strip : 'Hollis   Is   A   Java   Coder'

所以,Java 11 中的 strip 方法要比trim方法更加强大,可以移除很多不在ASCII中的空白字符,判断方式就是通过Character.isWhitespace方法。

trim 和 strip 方法的区别

上面我们介绍了两个都可以移除字符串开头和结尾的方法,分别是trim 和 strip,再来对比下他们的区别:

|trim|strip| |---|---| Java 1引入|Java 11引入 使用ASCII|使用Unicode值 删除开头和结尾的空白字符|删除开头和结尾的空白字符 删除ASCII值小于或等于' U+0020 '或' 32 '的字符|根据unicode删除所有空格字符

stripLeading() 和 stripTrailing()

stripLeading()和stripTrailing()方法也都是在Java 11中添加的。作用分别是删除字符串的开头的空格以及删除字符串的末尾的空格。

与strip方法类似,stripLeading、stripTrailing也使用Character.isWhitespace(int)来标识空白字符。用法也和strip类似:

public class StringTest {    public static void main(String args[]) {      String stringWithSpace ='\u2001' + "  Hollis   Is   A   Java   Coder  " + '\u2001';        System.out.println("'" + '\u2001' + "' is space : " +  Character.isWhitespace('\u2001'));        StringTest.stripLeadingTest(stringWithSpace);        StringTest.stripTrailingTest(stringWithSpace);    }    private static void stripLeadingTest(String stringWithSpace){        System.out.println("Before stripLeading : \'" + stringWithSpace + "\'");        String stringAfterTrim = stringWithSpace.stripLeading();        System.out.println("After stripLeading : \'" + stringAfterTrim + "\'");    }     private static void stripTrailingTest(String stringWithSpace){        System.out.println("Before stripTrailing : \'" + stringWithSpace + "\'");        String stringAfterTrim = stringWithSpace.stripTrailing();        System.out.println("After stripTrailing : \'" + stringAfterTrim + "\'");    }}

输出结果:

' ' is space : trueBefore stripLeading : '   Hollis   Is   A   Java   Coder   'After stripLeading : 'Hollis   Is   A   Java   Coder   'Before stripTrailing : '   Hollis   Is   A   Java   Coder   'After stripTrailing : '   Hollis   Is   A   Java   Coder'

replace

移除字符串中的空白字符,除了使用trim、strip以外,还有一个办法,那就是使用replace方法把其中的空白字符替换掉。

replace是从java 1.5中添加的,可以用指定的字符串替换每个目标字符串。

此方法替换所有匹配的目标元素,使用方式如下:

 public class StringTest {    public static void main(String args[]) {        String stringWithSpace ="  Hollis   Is   A   Java   Coder  ";        StringTest.replaceTest(stringWithSpace);    }    private static void replaceTest(String stringWithSpace){        System.out.println("Before replace : \'" + stringWithSpace + "\'");        String stringAfterTrim = stringWithSpace.replace(" ", "");        System.out.println("After replace : \'" + stringAfterTrim + "\'");    }}

结果:

Before replace : '  Hollis   Is   A   Java   Coder  'After replace : 'HollisIsAJavaCoder'

可见,以上使用replace方法可以替换掉字符串中的所有空白字符。特别需要注意的是,replace方法和trim方法一样,只能替换掉ASCII中的空白字符。

replaceAll

replaceAll是Java 1.4中添加的最强大的字符串操作方法之一。我们可以将这种方法用于许多目的。

使用replaceAll()方法,我们可以使用正则表达式来用来识别需要被替换的目标字符内容。使用正则表达式,就可以实现很多功能,如删除所有空格,删除开头空格,删除结尾空格等等。

我们只需要用正确的替换参数创建正确的正则表达式。一些正则表达式的例子如下:

\s+   所有的空白字符^\s+      字符串开头的所有空白字符\s+$      字符串结尾的所有空白字符

注意,在java中要添加/我们必须使用转义字符,所以对于\s+ 我们必须使用 \\s+

public class StringTest {    public static void main(String args[]) {        String stringWithSpace ="  Hollis   Is   A   Java   Coder  ";        StringTest.replaceAllTest(stringWithSpace," ");        StringTest.replaceAllTest(stringWithSpace,"\\s+");        StringTest.replaceAllTest(stringWithSpace,"^\\s+");        StringTest.replaceAllTest(stringWithSpace,"\\s+$");    }    private static void replaceAllTest(String stringWithSpace,String regex){        System.out.println("Before replaceAll with '"+ regex +"': \'" + stringWithSpace + "\'");        String stringAfterTrim = stringWithSpace.replaceAll(regex, "");        System.out.println("After replaceAll with '"+ regex +"': \'" + stringAfterTrim + "\'");    }}

结果:

Before replaceAll with ' ': '  Hollis   Is   A   Java   Coder  'After replaceAll with ' ': 'HollisIsAJavaCoder'Before replaceAll with '\s+': '  Hollis   Is   A   Java   Coder  'After replaceAll with '\s+': 'HollisIsAJavaCoder'Before replaceAll with '^\s+': '  Hollis   Is   A   Java   Coder  'After replaceAll with '^\s+': 'Hollis   Is   A   Java   Coder  'Before replaceAll with '\s+$': '  Hollis   Is   A   Java   Coder  'After replaceAll with '\s+$': '  Hollis   Is   A   Java   Coder'

正如我们所看到的,如果将replaceAll()与适当的正则表达式一起使用,它将是非常强大的方法。

replaceFirst

replaceFirst方法也是在java 1.4中添加的,它只将给定正则表达式的第一个匹配项替换为替换字符串。

如果您只需要替换第一次出现的情况,那么这个方法非常有用。例如,如果我们只需要删除前导空格,我们可以使用\\s+或^\\s+。

我们还可以通过使用\\s+$正则表达式使用此方法来删除末尾空格。因为这个表达式将只匹配行的最后一个空格。因此最后的空格被认为是这个方法的第一个匹配。

让我们举一个从字符串中删除前导和尾随空格的例子

public class StringTest {    public static void main(String args[]) {        String stringWithSpace ="  Hollis   Is   A   Java   Coder  ";        StringTest.replaceFirstTest(stringWithSpace," ");        StringTest.replaceFirstTest(stringWithSpace,"\\s+");        StringTest.replaceFirstTest(stringWithSpace,"^\\s+");        StringTest.replaceFirstTest(stringWithSpace,"\\s+$");    }    private static void replaceFirstTest(String stringWithSpace,String regex){        System.out.println("Before replaceFirst with '"+ regex +"': \'" + stringWithSpace + "\'");        String stringAfterTrim = stringWithSpace.replaceFirst(regex, "");        System.out.println("After replaceFirst with '"+ regex +"': \'" + stringAfterTrim + "\'");    }}

结果:

Before replaceFirst with ' ': '  Hollis   Is   A   Java   Coder  'After replaceFirst with ' ': ' Hollis   Is   A   Java   Coder  'Before replaceFirst with '\s+': '  Hollis   Is   A   Java   Coder  'After replaceFirst with '\s+': 'Hollis   Is   A   Java   Coder  'Before replaceFirst with '^\s+': '  Hollis   Is   A   Java   Coder  'After replaceFirst with '^\s+': 'Hollis   Is   A   Java   Coder  'Before replaceFirst with '\s+$': '  Hollis   Is   A   Java   Coder  'After replaceFirst with '\s+$': '  Hollis   Is   A   Java   Coder'

总结

本文介绍了7种移除字符串中的空白字符的方法。

想要直接移除掉字符串开头的空白字符,可以使用stripLeading、replaceAll和replaceFirst

想要直接移除掉字符串末尾的空白字符,可以使用stripTrailing、replaceAll和replaceFirst

想要同时移除掉字符串开头和结尾的空白字符,可以使用strip、trim

想要移除掉字符串中的所有空白字符,可以使用replace和replaceAll

而Java 11种新增的strip、stripTrailing以及stripLeading方法,可以移除的字符要比其他方法多,他可以移除的空白字符不仅仅局限于ASCII中的字符,而是Unicode中的所有空白字符,具体判断方式可以使用Character.isWhitespace进行判断。


http://chatgpt.dhexx.cn/article/JJPZQTM1.shtml

相关文章

html空白字符显示效果,什么是空白字符?空白符有哪些?

空白字符,也可简称“空白符”,通俗理解,就是不会显示出来的字符,类似空格符、回车换行符、制表符之类的字符,从视觉效果上来看,只是一个空白区域而已。 空白字符有哪些? 空白符主要有空格符、回…

java 字符串 空白字符_Java String中移除空白字符的多种方式汇总

前言 字符串,是Java中最常用的一个数据类型了。我们在日常开发时候会经常使用字符串做很多的操作。比如字符串的拼接、截断、替换等。 这一篇文章,我们介绍一个比较常见又容易被忽略的一个操作,那就是移除字符串中的空格。 其实,在Java中从字符串中删除空格有很多不同的方法…

Spark 高级数据分析(第2版)

内容简介 作为计算框架,Spark 速度快,开发简单,能同时兼顾批处理和实时数据分析,因此很快被广大企业级用户所采纳,并随着近年人工智能的崛起而成为分析和挖掘大数据的重要得力工具。 本书由业内知名数据科学家执笔&a…

XGBoost与LightGBM文本分类

目录 用户评论情感极性判别 一、数据准备 二、数据预处理 三、文本特征提取 四、将数据转换为DMatrix类型 五、构建XGBoost模型 1、XGBoost模型主要参数 (1)通用参数 (2)Booster参数 (3)学习目标…

文本分类概念类大总结(机器学习+深度学习)

基础普及: https://zhuanlan.zhihu.com/p/25928551 综述类(有不同算法在各数据集上的性能对比):   Deep Learning Based Text Classification:A Comprehensive Review(20.04)   A Survey on Text Class…

新闻个性化推荐综述

MIND: A Large-scale Dataset for News Recommendation ACL 2020 0. 摘要 新闻推荐是实现个性化新闻服务的一项重要技术。与已经被广泛研究的产品推荐和电影推荐相比,新闻推荐的研究非常有限,主要是因为缺乏高质量的基准数据集。本文提出了一个名为MI…

新基建之数据中心

绪论 4月20日上午,国家发展改革委通过网上方式举行4月份新闻发布会。会上回答了彭博社记者关于新型基础设施建设的提问。内容如下: 目前来看,新型基础设施主要包括3个方面内容: 一是信息基础设施。主要是指基于新一代信息技术演…

机器学习案例实战:Python文本数据分析新闻分类任务

原创文章,如需转载请保留出处 本博客为唐宇迪老师python数据分析与机器学习实战课程学习笔记一. 文本分析与关键词提取 1.1 文本数据 1.2 停用词 语料中大量出现没啥大用留着过年吗 1.3 Tf-idf:关键词提取 《中国的蜜蜂养殖》:进行词频(…

音视频融合综述

文章目录 前言摘要正文1介绍音视频特征提取和融合类型融合的技术挑战依赖问题同步问题数据问题 最近的进展和研究方法异步动态加权深度学习多模态融合学习:跨模式学习:共享学习DL使用经验多视图学习 总结 个人总结与思考 前言 最近需要加强相关领域的深…

从0到1构建新闻长文本分类系统

新闻分类系统概述 新闻分类系统,顾名思义,就是对于一片新闻或者是一片文章,进行自动的分类,例如政治,财经,娱乐等等 从技术角度讲,其实属于自然语言处理中比较经典的文本分类问题。当然在一个工业级别的分…

谈文本分类

本文来自对《文本分类研究综述》汪岿的阅读 文章目录 1. 为什么要进行文本分类2. 文本分类的分类、应用3. 当前文本分类面临的挑战4. 文本分类的前景 1. 为什么要进行文本分类 在大数据时代,网络上的文本数据日益增长。采用文本分类技术对海量数据进行科学地组织和…

多模态融合技术综述和应用

文章目录 多模态技术基础1,多模态融合架构(神经网络模型的基本结构形式)1.1联合架构1.2协同架构1.3编解码架构(自监督) 2,多模态融合方法2.1早期融合2.2 晚期融合2.3混合融合 3,模态对齐方法3.1…

大数据分析案例-基于随机森林算法构建新闻文本分类模型

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集…

【数据挖掘】天池挑战赛 新闻推荐

比赛网址:https://tianchi.aliyun.com/competition/entrance/531842/introduction 项目源码:Github 一、项目知识点 数据预处理; 数据可视化; 特征工程; 模型选择; 实验结果的评价; 二、…

python-新闻文本分类详细案例-(数据集见文末链接)

文章目录 分析思路所用数据集一、导入相关包二、数据分析1.读取数据2. jieba分词并去除停用词3. TF-IDF4. 网格搜索寻最优模型及最优参数5. 预测并评估预测效果 总结 分析思路 新闻文本数据包含四类新闻,分别用1,2,3,4 表示。 &a…

NetWORK ShortCuts 创建

很多时候我们创建了很多SHARE DRIVE的SHOT CUT: 但是我们不知道他们的路径在哪里,在下一台新电脑的时候,我们又要重新创建?NONONO, 我们打开其中一个SHORT CUT 我们点一下 "Proposal_Content_RPA" 右边的空…

shortcuts实现

1.使用条件 android 7.1以上 2.功能说明 长按桌面app图标出现快捷方式列表,点击可跳转到app的指定界面,用户也可以将其作为一个单独的快捷方式 3.效果截图 3.技术实现 分为两种方式,静态xml配置和动态代码配置,二者各有优劣&#…

Android ShortCuts使用

ShortCuts是什么? Shortcuts是指在桌面长按app图标而出现的快捷方式,可以为你的app的关键功能添加更加快速的入口而不是先打开app 点击快捷方式可以访问应用功能,而且这种快捷方式也可以被拖拽到桌面的单独位置,变成单独的左面快…

Android App Shortcuts

周五了,周末还远吗?~ 加入我知识星球的人都得到了提升,可不要错过哦~ 点击阅读原文即可。 本文较长,阅读大约十分钟 ~ 我们都知道iPhone6S推出了3D Touch的功能,也算是一个大卖点,Google也后来居上&#xf…

Linux下cut命令用法详解

Linux下cut命令用法详解 原创:frozen_sucker(冰棍) 有时我们经常会遇到这样一些问题:有一页电话号码薄,上面按顺序规则地写着人名、家庭住址、电话、备注等,此时我们只想取出所有人的名字和其对应的电话号码,你有几种…