java中String字符串删除空格的七种方式
作者:你邻座的怪同学 发布时间:2023-03-11 05:54:24
在Java中从字符串中删除空格有很多不同的方法,如trim
,replaceAll
等。但是,在JDK 11
添加了一些新的功能,如strip
、stripLeading
、stripTrailing
等。
想要从String中移除空格部分,有多少种方法,下面介绍JDK原生自带的方法,不包含第三方工具类库中的类似方法
trim()
: 删除字符串开头和结尾的空格。strip()
: 删除字符串开头和结尾的空格。stripLeading()
: 只删除字符串开头的空格stripTrailing()
: 只删除字符串的结尾的空格replace()
: 用新字符替换所有目标字符replaceAll()
: 将所有匹配的字符替换为新字符。此方法将正则表达式作为输入,以标识需要替换的目标子字符串replaceFirst()
: 仅将目标子字符串的第一次出现的字符替换为新的字符串
需要注意的最重要的一点是,在Java中String对象是不可变的,这意味着我们不能修改字符串,因此以上所有的方法我们得到的都是一个新的字符串。
在线运行工具
trim()
trim()
是Java开发人员最常用的删除字符串开头和结尾的空格方法
public class StringTest {
public static void main(String[] args) {
String stringWithSpace = " Hello word java ";
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 : ' Hello word java '
After trim : 'Hello word java'
使用trim之后,原字符串中开头和结尾部分的空格内容都被移除掉了。其实,trim移除的空白字符指的是指ASCII值小于或等于32的任何字符(’ U+0020 '):
strip()
JDK 11
的发行版中,添加了新的strip()
方法来删除字符串中的前导和末尾空格。
trim
方法只能针对ASCII值小于等于32的字符进行移除,但是根据Unicode标准,除了ASCII中的字符以外,还是有很多其他的空白字符的。
而且为了识别这些空格字符,从Java 1.5开始,还在Character类中添加了新的isWhitespace(int)方法。该方法使用unicode来标识空格字符。你可以在http://jkorpela.fi/chars/spaces.html 了解更多关于unicode空格字符的信息。
而在Java 11中新增的这个strip方法就是使用这个Character.isWhitespace(int)方法来判断是否为空白字符并删除它们的:
strip示例
public class StringTest {
public static void main(String args[]) {
String stringWithSpace ='\u2001' + " Hello word java " + '\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 + "\'");
}
}
结果
' ' is space : true
Before strip : ' Hello word java '
After strip : 'Hello word java'
Java 11 中的 strip()
方法要比trim()
方法更加强大,他可以移除很多不在ASCII中的空白字符,判断方式就是通过Character.isWhitespace()
方法。
trim() 和 strip() 方法的区别
trim | strip |
---|---|
Java 1 引入 | Java 11 引入 |
使用ASCII | 使用Unicode值 |
删除开头和结尾的空白字符 | 删除开头和结尾的空白字符 |
删除ASCII值小于或等于’U+0020’或’32’的字符 | 根据unicode删除所有空白字符 |
stripLeading() 和 stripTrailing()
stripLeading()
和stripTrailing()
方法也都是在Java 11中添加的。作用分别是删除字符串的开头的空格以及删除字符串的末尾的空格。stripLeading
、stripTrailing
也使用Character.isWhitespace(int)
来标识空白字符。用法也和strip类似:
public class StringTest {
public static void main(String args[]) {
String stringWithSpace ='\u2001' + " Hello word java " + '\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("删除开头的空白字符");
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("删除结尾的空白字符");
System.out.println("Before stripTrailing : \'" + stringWithSpace + "\'");
String stringAfterTrim = stringWithSpace.stripTrailing();
System.out.println("After stripTrailing : \'" + stringAfterTrim + "\'");
}
}
输出结果:
' ' is space : true
删除开头的空白字符
Before stripLeading : ' Hello word java '
After stripLeading : 'Hello word java '
删除结尾的空白字符
Before stripTrailing : ' Hello word java '
After stripTrailing : ' Hello word java'
replace
replace是从java 1.5中添加的,可以用指定的字符串替换每个目标子字符串。
此方法替换所有
匹配的目标元素
public class StringTest {
public static void main(String args[]) {
String stringWithSpace =" Hello word java ";
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 : ' Hello word java '
After replace : 'Hellowordjava'
使用replace方法可以替换掉字符串中的所有空白字符。特别需要注意的是,replace方法和trim方法一样,只能替换掉ASCII中的空白字符。
replaceAll
replaceAll
是Jdk 1.4中添加的最强大的字符串操作方法之一。我们可以将这种方法用于许多目的。
使用replaceAll()
方法,我们可以使用正则表达式来用来识别需要被替换的目标字符内容。使用正则表达式,就可以实现很多功能,如删除所有空格,删除开头空格,删除结尾空格等等。
\s+ 所有的空白字符
^\s+ 字符串开头的所有空白字符
\s+$ 字符串结尾的所有空白字符
在java中要添加\
我们必须使用转义字符,所以对于\s+
我们必须使用 \\s+
replaceAll(regex, “”); // 将正则表达式匹配到的内容,替换为""
public class StringTest {
public static void main(String args[]) {
String stringWithSpace =" Hello word java ";
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 ' ': ' Hello word java '
After replaceAll with ' ': 'Hellowordjava'
Before replaceAll with '\s+': ' Hello word java '
After replaceAll with '\s+': 'Hellowordjava'
Before replaceAll with '^\s+': ' Hello word java '
After replaceAll with '^\s+': 'Hello word java '
Before replaceAll with '\s+$': ' Hello word java '
After replaceAll with '\s+$': ' Hello word java'
replaceFirst
replaceFirst方法也是在jdk1.4中添加的,它只将给定正则表达式的第一个匹配项
替换为替换字符串。
public class StringTest {
public static void main(String args[]) {
String stringWithSpace =" Hello word java ";
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 ' ': ' Hello word java '
After replaceFirst with ' ': ' Hello word java '
Before replaceFirst with '\s+': ' Hello word java '
After replaceFirst with '\s+': 'Hello word java '
Before replaceFirst with '^\s+': ' Hello word java '
After replaceFirst with '^\s+': 'Hello word java '
Before replaceFirst with '\s+$': ' Hello word java '
After replaceFirst with '\s+$': ' Hello word java'
来源:https://blog.csdn.net/weixin_45816407/article/details/124242098
猜你喜欢
- 大致思路:注解实现方式:就是用 反射机制. 获取指定的包下使用了注解的类,存储在一个map容器, 然后获取map容器下类的属性, 利用反射给
- package other;import java.security.MessageDigest;import java.security.
- 可以指定编码如:utf-8来写入和读取文件。如果文件编码未知,可以通过该方法先得到文件的编码后再指定正确的编码来读取,否则会出现文件乱码问题
- Java——获取字符串编码格式判断一个字符串的编码格式: public static St
- 这篇文章主要介绍了java property配置文件管理工具框架过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考
- 1. 前言Spring最重要的一个概念当属Bean了,我们写的Controller、Service、Dao凡是加了对应注解交给Spring管
- this总要有个事物来代表类的当前对象,就像C++中的this指针一样,Java中的this关键字就是代表当前对象的引用。它有三个主要的作用
- Profile多环境配置我们在开发项目时,通常同一套程序会被发布到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、red
- 1、HashMap HashMap继承抽象类AbstractMap,实现接口Map、Cloneable, Serializable接口。Ha
- 前言我们在 页面切换转场动画,英雄救场更有趣!介绍了 Hero 动画效果,使用 Hero 用于转场能够提供非常不错的体验。既然称之
- springboot用以进行web项目开发的便捷性,本文不再赘述,主要是想将工作中基于springboot与gradle的多模块项目的构建经
- 场景既然要搞懂Redis分布式锁,那肯定要有一个需要它的场景。高并发售票问题就是一个经典案例。搭建环境准备redis服务,设置redis的键
- 1 配置文件的方法我们编写spring 框架的代码时候。一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量
- 简介在文章《GraalVM和Spring Native尝鲜,一步步让Springboot启动飞起来,66ms完成启动》中,我们介绍了如何使用
- 突然心血来潮,想自己做个小程序玩玩,但是怎么把他做成一个exe文件,让大家能够更好的理解和使用呢,百度了一下,说是需要exe4j来生成,但是
- 本文会先介绍通用 Mapper 的简单原理,然后使用最简单的代码来实现这个过程。基本原理通用 Mapper 提供了一些通用的方法,这些通用方
- 众所周知Web服务器与客户端之间的通信是使用HTTP协议的。HTTP是一个客户端和服务器端请求和应答的标准(TCP)。因为HTTP协议是基于
- 现象: 1. 表面现象: 方法中输出的日志, 日志文件中找不到, 也没有任何报错(即@Async标注的方法没有执行, 也没有报错)2. 分析
- 序列化一般应用与以下场景之中:1.永久性保存对象,把对象通过序列化字节流保存到本地文件中;2.通过序列化在网络中传输对象3.通过序列化在进程
- @Cacheable在同一类中方法调用无效上述图片中,同一个类中genLiveBullets()方法调用同类中的queryLiveByRoo