如何分割包含空格的字符串并保留空格?
这里是代码:
String words[] = s.split(" ");
字符串s包含:hello world
代码运行后,words[]包含:"hello"
""
world
理想情况下,中间不应该是空字符串,而应该包含两个空格:words[]应该是:"hello"
" "
" "
world
我该如何使它得到这个结果?
String[] words = "hello world".split("((?<=\\s+)|(?=\\s+))");
(?<=\s+)
和(?=\s+)
是零宽度正回顾后发断言和零宽度正预测先行断言。
如果您能容忍将两个空格连在一起作为一个字符串,那么您可以执行
String[] words = s.split("\\b");
然后words包含("hello", " ", "world")
。
s.split("((?<= )|(?= ))");
是一种方法。
从技术上讲,这个正则表达式使用了前瞻和后顾。每个=
后面的单个空格是分隔符。
List<String> result = new LinkedList<>();
int rangeStart = 0;
for (int i = 0; i < s.length(); ++i) {
if (Character.isWhitespace(s.charAt(i))) {
if (rangeStart < i) {
result.add(s.substring(rangeStart, i));
}
result.add(Character.toString(s.charAt(i)));
rangeStart = i + 1;
}
}
if (rangeStart < s.length()) {
result.add(s.substring(rangeStart));
}
是的,没有正则表达式,你可以起诉我。这样你就可以更容易地看到它的工作原理。
String.split
会删除你提供给它的分隔符(在这种情况下是空格)。如果你想要不同的行为,你需要自己实现一个split
的变体。 - Chronio