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

简介: 在Java中从字符串中删除空格的不同方法

前言

技术不进则退,学无止境。

今天,我们来聊一下,字符串是如何剔除掉空格的。因为在很多时候,会用到这个功能。

字符串操作在编程时是最普通的操作。其中一个比较频繁的操作就是删除字符串文本中或字符串周围的空格。Jdk11 之前,我们都知道在Java中从字符串中删除空格的不同方法,即trim,replaceAll。但是,Java 11通过诸如strip,stripLeading和stripTrailing之类的方法对这些方法进行了一些新的添加。

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

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

总结了下,大概分为以下的方法:

  1. trim() :从字符串中删除前导和尾随空格
  2. strip() :删除字符串开头和结尾的空格。Strip方法支持Unicode字符集
  3. trim vs  strip:trim与strip方法之间的差异
  4. stripLeading() :仅从字符串开头删除空格
  5. stripTrailing() :仅从字符串末尾删除空格
  6. replace() :用新字符替换所有目标字符
  7. replaceAll() :将所有匹配的字符替换为新字符。此方法将正则表达式作为输入,以标识需要替换的目标子字符串
  8. replaceAll vs replace :replace和replaceAll方法之间的区别
  9. replaceFirst() :仅使用新替换字符串替换第一次出现的目标子字符串

需要注意的最重要一点是,在Java中,字符串对象是不可变的。这意味着我们无法修改字符串,因此所有方法都将通过所有转换返回新字符串。

Java中的trim()方法

trim()是用来从字符串中提出前后空格最常用的操作方法。方法能够操作ASCII 值小于等于32 (‘U+0020’)的字符

public class StringTrimTest {
   public static void main(String[] args) {
       String string = "   String   with   space   ";
       System.out.println("格式化前: \"" + string +"\"");
       System.out.println("格式化后: \"" + string.trim() +"\"");
  }
}

执行程序,输出结果:

格式化前: "   String   with   space   "
格式化后: "String   with   space"

jdk11,Java中的strip()方法

在Java 11发行版中,添加了新的strip()方法,以从String中删除前和后空格。

添加此方法的原因是,根据Unicode标准,存在各种空格字符,其ASCII值大于32('U + 0020')。例如:8193(U + 2001)。

为了识别这些空格字符,新方法是Java 1.5在Character类中添加了Whitespace(int)。此方法使用unicode识别空格字符。您可以在此处阅读有关Unicode空格字符的更多信息。

strip使用此Character.is Whitespace(int)方法覆盖范围广泛的空白字符并将其删除。

public class StringStripTest {
   public static void main(String[] args) {
       String string = "   String   with   space   ";
       System.out.println("格式化前: \"" + string+"\"");
       System.out.println("格式化后: \"" + string.strip()+"\"");
  }
}

执行程序,输出结果:

格式化前: "   String   with   space   "
格式化后: "String   with   space"

strip vs trim

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'+"String   with   space"+ '\u2001';
       System.out.println("格式化前: \"" + string+"\"");
       System.out.println("trim 格式化后: \"" + string.trim()+"\"");
       System.out.println("strip 格式化后: \"" + string.strip()+"\"");
  }
}

执行程序,输出结果:

格式化前: " String   with   space "
trim 格式化后: " String   with   space "
strip 格式化后: "String   with   space"

在上面的示例中,我们可以看到trim方法无法删除'\ u2001'unicode字符添加的空格字符。

注意:如果您在Windows计算机上运行,由于设置了有限的unicode,您可能看不到类似的输出。

Jdk11,Java中的stripLeading ( ) 方法

Java 11中添加了strip Leading()方法,以删除字符串中的所有前缀空格。

与strip方法类似,Strip Leading也使用Character.is Whitespace(int)来识别空白。

public class StringStripLeadingTest {
   public static void main(String[] args) {
       String string = "   String   with   space   ";
       System.out.println("格式化前: \"" + string+"\"");
       System.out.println("格式化后: \"" + string.stripLeading()+"\"");
  }
}

执行程序,输出结果:

格式化前: "   String   with   space   "
格式化后: "String   with   space   "

Jdk11,Java中的stripTrailing() 方法

strip Trailing()方法已在Java 11中添加,从字符串中删除了所有后缀空格。

与strip方法类似,Strip Trailing也使用Character.is Whitespace(int)来识别空白。

public class StringStripTrailingTest {
   public static void main(String[] args) {
     String string = "   String   with   space   ";
     System.out.println("格式化前: \"" + string+"\"");
       System.out.println("格式化后: \"" + string.stripTrailing()+"\"");
  }
}

执行程序,输出结果:

格式化前:"   String   with   space   "
格式化后:"   String   with   space"

replace(CharSequence target, CharSequence replacement):

从Java 1.5中添加,此方法用于将每个目标子字符串替换为指定的替换字符串。

此方法替换所有匹配的目标元素。

注意:java字符串类中提供了另一种方法replace(char旧的char,char新的char)。唯一的区别是此方法将单个字符用作目标和替换。我们不能使用此方法来删除空间,因为我们不能使用空字符作为替换。

public class StringReplaceTest {
   public static void main(String[] args) {
       String string = "   String   with   space   ";
       System.out.println("格式化前: \"" + string + "\"");
       System.out.println("格式化后: \"" + string.replace(" ", "") + "\"");
  }
}

执行程序,输出结果:

格式化前: "   String   with   space   "
格式化后: "Stringwithspace"

replaceAll (String regex, String replacement)

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

使用replace All()方法,我们可以使用给定的替换字符串替换每个匹配的正则表达式子字符串。例如,删除所有空格,删除前导空格,删除尾随空格等等。

我们只需要创建带有正确替换参数的正确正则表达式即可。一些正则表达式示例如下:

\s+ 匹配所有的空格
^\s+ 匹配所有开始的空格
\s+$ 匹配所有结束的空格

替换字符串中的空格的示例

注意:在Java中添加“ /”,我们必须使用转义符,因此对于“ \ s +”,我们必须使用“ \ s +”

public class StringReplaceAllTest {
   public static void main(String[] args) {
       String string = "   String   with   space   ";
       System.out.println("replaceAll执行前: \"" + string+"\"");
       System.out.println("替换所有的空格: \"" + string.replaceAll(" ", "") + "\"");
       System.out.println("按正则表达式替换所有的空格: \"" + string.replaceAll("\\s+", "") + "\"");
       System.out.println("按正则表达式替换头的空格: \"" + string.replaceAll("^\\s+", "") + "\"");
       System.out.println("按正则表达式替换尾的空格: \"" + string.replaceAll("\\s+$", "") + "\"");
  }
}

执行程序,输出结果:

replaceAll执行前: "   String   with   space   "
替换所有的空格: "Stringwithspace"
按正则表达式替换所有的空格: "Stringwithspace"
按正则表达式替换头的空格: "String   with   space   "
按正则表达式替换尾的空格:"   String   with   space"

如我们所见,如果我们将其与正确的正则表达式一起使用,则replaceAll()替换功能非常强大。

replaceAll vs replace

replaceAll() replace()
自 Java 1.4 自Java 1.5
接受正则表达式为目标符 接受字符串为目标符
能够进行动态字符串替换 能够进行字符串替换
移除ASCII码小于等于‘U+0020’ 或’32’空格字符 移除所有满足unicode的空格字符

replaceFirst(String regex, String replacement)

Java 1.4中添加了``replaceFirst ''方法,仅将给定正则表达式的第一个匹配替换为替换字符串。

如果您只需要替换一个第一次出现的位置,则此方法非常有用。例如,如果我们只需要删除前导空格,则可以使用“ \ s +”或“ ^ \ s +”。

我们还可以使用此方法通过使用“ \ s + $”正则表达式删除尾随空格。因为此表达式将仅匹配行中的最后空格。因此,最后一个空格被视为此方法的第一个匹配项。

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

public class StringReplaceFistTest {
     public static void main(String[] args) {
     String string = "   String   with   space   ";
     System.out.println("替换前:\"" + string+"\"");
       System.out.println("替换:\"" + string.replaceFirst("space", "update") + "\"");
       System.out.println("替换头: \"" + string.replaceFirst("\\s+", "") + "\"");
       System.out.println("替换尾:\"" + string.replaceFirst("\\s+$", "") + "\"");   }
}

执行程序,输出结果:

替换前:"   String   with   space   "
替换:"   String   with   update   "
替换头: "String   with   space   "
替换尾:"   String   with   space"
目录
相关文章
|
2月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
84 9
|
2月前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
146 83
|
2月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
60 26
|
2月前
|
存储 缓存 安全
java 中操作字符串都有哪些类,它们之间有什么区别
Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
65 8
|
2月前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
47 4
|
2月前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
55 4
|
2月前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
27 1
|
2月前
|
缓存 算法 Java
本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制
在现代软件开发中,性能优化至关重要。本文聚焦于Java内存管理与调优,介绍Java内存模型、内存泄漏检测与预防、高效字符串拼接、数据结构优化及垃圾回收机制。通过调整垃圾回收器参数、优化堆大小与布局、使用对象池和缓存技术,开发者可显著提升应用性能和稳定性。
54 6
|
2月前
|
存储 Java 程序员
Java基础的灵魂——Object类方法详解(社招面试不踩坑)
本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
137 4