Java删除空字符:Java8 & Java11

Wesley13
• 阅读 489

操作字符串是编程时经常遇到的,常用的比如在字符串中处理空格。到目前为止,Java提供了很多从字符串中删除空格的不同方法,即trimreplaceAll。但是,Java 11通过诸如stripstripLeadingstripTrailing之类的方法对这些方法进行了一些功能性的拓展。

在大多数情况下,我们只使用trim()方法删除空格。有时候不禁停下来想一想是否有更好的方法来满足我们的需求?当然,trim()在大多数情况下都能很好地工作,但是java中有许多不同的方法。每种都有自己的优点和缺点。

在本文中,将详细介绍在Java中从字符串中删除空格的不同方法

  • trim():从字符串中删除前缀和后缀空格

  • strip():删除字符串开头和结尾的空格。strip()方法支持Unicode字符集

  • trim vs striptrimstrip方法之间的差异

  • 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.5Character类中添加了新方法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热文精选

Java删除空字符:Java8 & Java11

本文分享自微信公众号 - FunTester(NuclearTester)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Bill78 Bill78
2年前
Python 字符串常用方法总结
明确:对字符串的操作方法都不会改变原来字符串的值1,去掉空格和特殊符号name.strip()去掉空格和换行符name.strip('xx')去掉某个字符串name.lstrip()去掉左边的空格和换行符name.rstrip()去掉右边的空格和换行符2,字符串的搜索和替换name.count('x')查找某个
Wesley13 Wesley13
2年前
java从字符串中提取数字
string类函数的补充说明:trim()方法返回调用字符串对象的一个副本,但是所有起始和结尾的空格都被删除了,例子如下:Strings"HelloWorld".trim();就是把"HelloWorld"放入s中。(注意使用时必须赋值)1String类提供的方法:?(https://ww
Wesley13 Wesley13
2年前
Java日期时间API系列31
  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前
Stella981 Stella981
2年前
JS 苹果手机日期显示NaN问题
问题描述newDate("2019122910:30:00")在IOS下显示为NaN原因分析带的日期IOS下存在兼容问题解决方法字符串替换letdateStr"2019122910:30:00";datedateStr.repl
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
2年前
Java日期时间API系列30
  实际使用中,经常需要使用不同精确度的Date,比如保留到天2020042300:00:00,保留到小时,保留到分钟,保留到秒等,常见的方法是通过格式化到指定精确度(比如:yyyyMMdd),然后再解析为Date。Java8中可以用更多的方法来实现这个需求,下面使用三种方法:使用Format方法、 使用Of方法和使用With方法,性能对比,使用
Python进阶者 Python进阶者
1个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这