这是一个字符串:
String s = "119 days 6 hours 13 minutes 24 seconds";
如何为获取数组进行拆分:
{
"119 days",
"6 hours",
"13 minutes",
"24 seconds"
}
我不知道如何自己做。
我查找String.split()
并尝试了[a-z]\s
regExp,但它会删除最后一个字符
答案 0 :(得分:4)
针对此特定情况的一种方法,使用负面反对进行拆分。
import java.util.Arrays;
class rTest {
public static void main (String[] args) {
String s = "119 days 6 hours 13 minutes 24 seconds";
String[] parts = s.split("(?<![^a-zA-Z])\\s");
System.out.println(Arrays.toString(parts));
}
}
正则表达式:
(?<! look behind to see if there is not:
[^a-zA-Z] any character except: 'a' to 'z', 'A' to 'Z'
) end of look-behind
\s whitespace (\n, \r, \t, \f, and " ")
输出继电器
[119 days, 6 hours, 13 minutes, 24 seconds]
答案 1 :(得分:3)
你是在正确的道路上,但是你需要使用zero-width匹配组,这样他们就不会被吞下,所以像这样:
input.split(" (?=[0-9])");
答案 2 :(得分:2)
您可以拆分其后面有数字的每个空格。为此,您可以使用look ahead机制
(?=nextElement)
,因为split使用正则表达式。要表示正则表达式中的任何空格,您可以使用"\\s"
来表示任何数字"\\d"
。
答案 3 :(得分:2)
这是您尝试的两个解决方案,首先您可以简单地将字符串拆分为s.split(" ");
但是这将返回每个单词并简化所有空格。
因此,两个解决方案是按空格分割并通过数组并将每两个单词加在一起,中间有一个空格。
或者你可以改变输入字符串,这样你就可以分割除逗号等空格以外的东西(虽然这也涉及编辑字符串来自新格式的位置):
String s = "119 days, 6 hours, 13 minutes, 24 seconds";
String[] parts = s.split(", ");
答案 4 :(得分:2)
您可以使用split
零宽度环视,但我更愿意在合理的情况下避免使用环视。使用Matcher
会使过程代码更加冗长,但它具有使正则表达式更易于理解的附加优势。由于大多数程序员比正则表达式更好地理解过程语言,因此有时会产生更易于维护的代码。
String s = "119 days 6 hours 13 minutes 24 seconds";
Pattern regex = Pattern.compile("\\w+ \\w+"); // match two words
Matcher matcher = regex.matcher(s);
ArrayList<String> list = new ArrayList<String>();
while (matcher.find()) {
list.add(matcher.group());
}
System.out.println("list=" + list);