split(" +") 和 split(" ") 是不同的。

4

我想要删除字符串中的空格。

String input = "java example.java       aaa     bbb";
String[] temp = input.trim().split(" ");

那个结果是

java
example.java




aaa




bbb

但我希望得到的结果是

java
example.java
aaa
bbb

因此,我使用了 split(" +")。 结果是正确的。 但我不理解 split(" +") 是如何实现的。


2
该参数是一个正则表达式。请参考Pattern类中的正则表达式构造。+表示“前一个表达式出现一次或多次”,例如在您的情况下表示一个或多个空格。 - Andreas
@Andreas 谢谢。你的评论是基本解决方案。 - seung-jun kim
8个回答

5

split() 接受一个正则表达式作为参数。在正则表达式中,“+”表示“前面的元素出现一次或多次”。因此,在“ +”上拆分将在“一个或多个空格”处拆分。


3
  • 第一种情况中,这是一个普通的字符串分割。
  • 而在第二种情况中,您借助于正则表达式进行操作。

来自split()方法的文档:

在给定正则表达式的匹配项周围拆分此字符串。

简单的空格没有任何表达式,而+则有。

string.split(" +")将分割定界符设置为一个或多个前一个元素,在您的情况下可以是任意数量的空格字符 (" ")。


1
最好的提供空格正则表达式的方式是使用 \\s+。这表示一个或多个空格。
String input = "java example.java       aaa     bbb";
String[] temp = input.trim().split("\\s+");

如果您只期望单个空格,则使用\\s表示单个空格。对于多个空格,请始终使用\\s+,这就是在您的情况下发生的事情。

1

0
在正则表达式中,"+" 表示前面的字符出现一次或多次,所以 " +" 表示一个或多个空格。 请参考正则表达式语法
而在 split 方法中,参数是正则表达式,而不是字符串,这是大多数人所误解的。请参考split

0

该参数是用于在项目之间被丢弃的文本的正则表达式

使用" ",字符串被分割为"java", " ", "example.java", " ", "", " ", "", " ", "", " ", "", " ", "", " ", "", " ", "aaa", " ", "", " ", "", " ", "", " ", "", " ", "bbb",然后将" "去掉,留下"java", "example.java", "", "", "", "", "", "", "aaa", "", "", "", "", "bbb"。当有多个连续的空格时,每个空格都单独匹配" "模式,并且每对空格之间有一个空字符串""

使用" +",这意味着任何一个或多个空格组成的组合都是一个匹配项。因此,字符串被分割为"java", " ", "example.java", " ", "aaa", " ", "bbb",并且空格组被去掉,留下"java", "example.java", "aaa", "bbb"


0

我建议使用string.split("\\s+"),其中\\s代表任何空白字符(空格、制表符、换行符等)


0
.split(" ") 和 .split(+) 的区别是:
正则表达式 " ": - 匹配空格字符字面上。
正则表达式 (" +"):
- 匹配一个单独的空白字符(制表符、换行符、回车符、垂直制表符、换页符),重复匹配一次或多次。(贪婪模式)
简述:

" " 在一个单独的空格字符处拆分数组。

/\s/ 可以在任何种类的空白字符处拆分数组。

'+' 匹配一次或多次。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接