Java删除空字符:Java8 & Java11
操作字符串是编程时经常遇到的,常用的比如在字符串中处理空格。到目前为止,Java
提供了很多从字符串中删除空格的不同方法,即trim
,replaceAll
。但是,Java 11
通过诸如strip
,stripLeading
和stripTrailing
之类的方法对这些方法进行了一些功能性的拓展。
在大多数情况下,我们只使用trim()
方法删除空格。有时候不禁停下来想一想是否有更好的方法来满足我们的需求?当然,trim()
在大多数情况下都能很好地工作,但是java
中有许多不同的方法。每种都有自己的优点和缺点。
在本文中,将详细介绍在Java
中从字符串中删除空格的不同方法
-
trim()
:从字符串中删除前缀和后缀空格 -
strip()
:删除字符串开头和结尾的空格。strip()
方法支持Unicode
字符集 -
trim vs strip
:trim
和strip
方法之间的差异 -
stripLeading()
:仅从字符串开头删除空格 -
stripTrailing()
:仅从字符串末尾删除空格 -
replace()
:用新字符替换所有目标字符 -
replaceAll()
:将所有正则匹配的字符替换为新字符 -
replaceFirst()
:使用新替换字符串替换第一次匹配成功的子字符串 -
需要注意的最重要一点是,在
Java
中,字符串对象是不可变的。这意味着我们无法修改字符串,因此所有方法都将通过所有转换返回新字符串。
trim()方法
trim()
是Java
开发人员最常用的删除前导和尾随空格的方法。对于trim()
方法,空格字符是指*ASCII值小于或等于32('U + 0020')*的任何字符。
public class FunTester {
public static void main(String[] args) {
String string = " one two three ";
System.out.println("原始字符串: \"" + string +"\"");
System.out.println("处理结果: \"" + string.trim() +"\"");
}
}
控制台输出:
原始字符串: " one two three "
处理结果: "one two three"
strip()方法
在Java 11
发行版中,添加了新的strip()
方法以从String
中删除前缀和后缀空格。
添加此方法的原因是,根据Unicode
标准,存在各种空格字符,其ASCII值大于32('U + 0020')。例如:8193(U + 2001)。为了识别这些空格字符,Java 1.5
从Character
类中添加了新方法isWhitespace(int)
。此方法使用unicode
识别空格字符。strip()
方法使用此Character.isWhitespace(int)
方法覆盖广泛的空白字符并将其删除。
public class StringStripTest {
public static void main(String[] args) {
String string = " one two three ";
System.out.println("原始字符串: \"" + string+"\"");
System.out.println("处理结果: \"" + string.strip()+"\"");
}
}
控制台输出:
原始字符串: " String with space "
处理结果: "one two three"
Java中trim和strip方法之间的区别
trim() | strip() |
---|---|
从Java 1 | 从Java 11 |
使用ASCII值 | 使用Unicode值 |
删除前缀和后缀字符(空格) | 删除前缀和后缀字符(空格) |
删除ASCII值小于或等于'U+0020'或'32'的字符 | 根据Unicode删除所有空格字符 |
-
让我们看一下使用大于 32('U+0020')
的unicode
的空白字符。
public class StringTrimVsStripTest {
public static void main(String[] args) {
String string = '\u2001'+"one two three"+ '\u2001';
System.out.println("原始字符串: \"" + string+"\"");
System.out.println("处理结果: \"" + string.trim()+"\"");
System.out.println("处理结果: \"" + string.strip()+"\"");
}
}
控制台输出:
原始字符串: " one two three "
处理结果: " one two three "
处理结果: "one two three"
在上面的示例中,我们可以看到trim()
方法无法删除由**'\u2001'Unicode**字符添加的空格字符。
-
注意:如果在Windows计算机上运行,则由于限制了 unicode
设置,可能看不到类似的输出。
stripLeading()方法
Java 11
中添加了stripLeading()
方法,可从String
中删除所有前缀空格。与strip()
方法类似,stripLeading()
也使用Character.isWhitespace(int)
识别空白字符。
public class StringStripLeadingTest {
public static void main(String[] args) {
String string = " one two three ";
System.out.println("原始字符串: \"" + string+"\"");
System.out.println("处理结果 : \"" + string.stripLeading()+"\"");
}
}
控制台输出:
原始字符串: " one two three "
处理结果 : "one two three "
stripTrailing()方法
Java 11
中增加了stripTrailing()
方法,可从String
中删除所有后缀空格。与stripLeading()
方法类似,stripTrailing()
也使用Character.isWhitespace(int)
识别空白。
public class StringStripTrailingTest {
public static void main(String[] args) {
String string = " one two three ";
System.out.println("原始字符串: \"" + string+"\"");
System.out.println("处理结果 : \"" + string.stripTrailing()+"\"");
}
}
控制台输出:
原始字符串:" one two three "
处理结果 :" one two three"
replace(CharSequence target, CharSequence replacement):
从Java 1.5
中添加,此方法用于将每个目标子字符串替换为指定的替换字符串。此方法替换所有匹配的目标字符。
-
注意: java
中的String
类中提供了另一种方法replace(char oldChar,char newChar)
。区别在于该方法参数是字符,而不是字符串。
public class StringReplaceTest {
public static void main(String[] args) {
String string = " one two three ";
System.out.println("原始字符串 : \"" + string + "\"");
System.out.println("处理结果: \"" + string.replace(" ", "") + "\"");
}
}
控制台输出:
原始字符串 : " one two three "
处理结果 : "onetwothree"
replaceAll(String regex, String replacement)
在Java 1.4
中添加,这是最强大的字符串处理方法之一。使用replaceAll()
方法,我们可以使用给定的替换字符串替换每个匹配的正则表达式子字符串。例如,删除所有空格,删除前导空格,删除尾随空格等等。我们只需要创建带有正确替换参数的正确正则表达式即可。参考:Java和Groovy正则使用。
-
在Java中添加'/',我们必须使用转义字符,因此对于 \s+
,必须使用\\s+
public class StringReplaceAllTest {
public static void main(String[] args) {
String string = " one two three ";
System.out.println("原始字符串 : \"" + string+"\"");
System.out.println("处理结果 : \"" + string.replaceAll(" ", "") + "\"");
System.out.println("处理结果 : \"" + string.replaceAll("\\s+", "") + "\"");
System.out.println("处理结果 : \"" + string.replaceAll("^\\s+", "") + "\"");
System.out.println("处理结果 : \"" + string.replaceAll("\\s+$", "") + "\"");
}
}
控制台输出:
原始字符串 : " one with three "
处理结果 : "onetwothree"
处理结果 : "onetwothree"
处理结果 : "one two three "
处理结果 : " one two three"
replaceFirst(String regex, String replacement)
在Java 1.4
中添加了replaceFirst()
方法,只用替换字符串替换给定正则表达式的第一个匹配项,用于替换一个第一次出现的位置。例如,如果我们只需要删除前缀空格,则可以使用\\s+
或^\\s+
。还可以使用此方法通过使用\\s+$
正则表达式删除后缀空格。
public class StringReplaceFistTest {
public static void main(String[] args) {
String string = " one two three ";
System.out.println("原始字符串 : \"" + string+"\"");
System.out.println("处理结果 : \"" + string.replaceFirst("three", "four") + "\"");
System.out.println("处理结果 : \"" + string.replaceFirst("\\s+", "") + "\"");
System.out.println("处理结果 : \"" + string.replaceFirst("\\s+$", "") + "\""); }
}
控制台输出:
原始字符串 : " one two three "
处理结果 : " one two four "
处理结果 : "one two three "
处理结果 : " one two three"
「公众号FunTester首发,原创分享爱好者,腾讯云和掘金社区首页推荐,知乎七级原创作者,欢迎关注、交流,禁止第三方擅自转载。」
FunTester热文精选
-
接口功能测试专辑 -
性能测试专题 -
写给所有人的编程思维 -
2020年Tester自我提升 -
未来的神器fiddler Everywhere -
测试开发工程师工作技巧 -
Fiddler Everywhere工具答疑 -
Selenium4 IDE,它终于来了 -
质量管理计划的基本要素
本文分享自微信公众号 - FunTester(NuclearTester)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
十年历史,鸿蒙 OS 始于方舟编译器和 LiteOS
鸿蒙系统(HarmonyOS)第一次吸引众多关注是在2019年5月。 2019年5月16日,特朗普政府以“安全问题”为由,将华为及其68家附属关联公司,禁止美国公司向华为提供零部件和技术。谷歌因此暂停对华为的安卓技术支持,海外用户重度依赖的谷歌地图、YouTube、Gmail谷歌“全家桶”无法安装。 同月,媒体曝出,国家知识产权商标局网站显示,华为公司已经申请通过了“华为鸿蒙”商标,适用于第9类别和第42类别,申请日期为2018年8月24日。 2019年5月21日,华为创始人、CEO任正非在接受记者采访时提到,华为在做自己的操作系统。2019年5月21日,华为消费者业务负责人余承东表示,华为操作系统最快2019年秋季、最晚2020年春天面市,将全面兼容安卓和Web应用。 2019年6月,华为轮值董事长胡厚崑在2019MWC接受媒体采访时表示,华为已经在合规经营下,采用了替代方案,也就是华为的“备胎计划”,其中包括鸿蒙操作系统。 2019年8 月,华为在其年度开发者大会上,正式发布了华为自主研发的操作系统——鸿蒙 1.0。 至此,华为鸿蒙系统算是正式发布。紧接着华为还发布第一款鸿蒙 OS...
- 下一篇
华为操作系统 29 年史
2019年8月,华为 HDC 2019 大会发布鸿蒙系统(HarmonyOS)1.0之后,有了解华为的人写了一篇文章《华为操作系统28年史》。今天再来看,就变成了29年史。 通常提到鸿蒙 OS 及其历史,方舟编译器和2012年发布的 LiteOS 被认为是其早期雏形,已经有接近10年的历史。但是这篇文章从上世纪90年代初开始讲起,回顾华为最早有关操作系统的故事。在2020年 HDC 大会到来之前,再看这篇文章,或许可以帮助了解操作系统研发应用之不易,也更能理解操作系统研发现状。 作者:老兵戴辉 转载自:公众号 最牛博弈 侵删 链接:https://mp.weixin.qq.com/s/pdoFVlUM2kXHvGgXo65K-w 8月9日,东莞松山湖沸腾的一天,华为消费者业务CEO余承东发布了鸿蒙操作系统,中文来自山海经,英文叫HarmonyOS,不是以前传说的OakOS。 余承东在介绍鸿蒙OS开发初衷时表示:“随着全场景智慧时代的到来,华为认为需要进一步提升操作系统的跨平台能力,包括支持全场景、跨多设备和平台的能力以及应对低时延、高安全性挑战的能力,因此逐渐形成了鸿蒙OS的雏形。鸿蒙...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS7,CentOS8安装Elasticsearch6.8.6
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Linux系统CentOS6、CentOS7手动修改IP地址