如何分割一串单词并保留空格?
以下是代码:
String words[] = s.split(" ");
字符串包含:hello world
代码运行后,单词[]包含:"hello"
""
world
理想情况下,它不应该是中间的空字符串,但包含两个空格:words []应该是:"hello"
" "
" "
world
如何获得此结果?
答案 0 :(得分:14)
您可以使用lookahead/lookbehind断言:
String[] words = "hello world".split("((?<=\\s+)|(?=\\s+))");
其中(?<=\\s+)
和(?=\\s+)
是零宽度组。
答案 1 :(得分:5)
如果您可以在一个字符串中容忍两个空格,则可以
String[] words = s.split("\\b");
然后单词包含("hello", " ", "world")
。
答案 2 :(得分:4)
Student
是单向的。
从技术上讲,正则表达式使用了lookahead和lookbehind。每个s.split("((?<= )|(?= ))");
之后的单个空格是分隔符。
答案 3 :(得分:1)
你可以这样做:
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));
}
是的,没有正则表达式,起诉我。通过这种方式,您可以更轻松地查看其工作原理。