这里是一个字符串:分割字符串,Java的
String s = "119 days 6 hours 13 minutes 24 seconds";
如何做出让阵列像这样分割:
{
"119 days",
"6 hours",
"13 minutes",
"24 seconds"
}
我不知道如何使它自己。
我看了String.split()
并试图[a-z]\s
正则表达式,但它减少的最后一个字符
这里是一个字符串:分割字符串,Java的
String s = "119 days 6 hours 13 minutes 24 seconds";
如何做出让阵列像这样分割:
{
"119 days",
"6 hours",
"13 minutes",
"24 seconds"
}
我不知道如何使它自己。
我看了String.split()
并试图[a-z]\s
正则表达式,但它减少的最后一个字符
的一种方法,采用了负反向预搜索分裂。
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]
你是在正确的道路,但你需要使用zero-width匹配组,以使它们不会吞噬,所以像:
input.split(" (?=[0-9])");
您可以在每个后面有数字的空格上拆分。要做到这一点,你可以使用look ahead机制
(?=nextElement)
因为split使用正则表达式。要在正则表达式中表示任何空格,您可以使用"\\s"
并表示任何数字"\\d"
。
这两个解决方案,你想要什么,首先,你可以简单地分割字符串s.split(" ");
然而,这将返回每个单词和缓解所有的空间。
所以这两个解决方案将是空间分割,并通过数组并添加每两个单词与中间的空间。
或者你可以改变输入字符串,所以你在比其他空间分割的东西,如逗号(尽管这也将涉及编辑在串从进入新的格式来):
String s = "119 days, 6 hours, 13 minutes, 24 seconds";
String[] parts = s.split(", ");
你可以使用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);
如果您想尝试用空格分割字符串,你发现'String.split',你尝试'字符串。 split(“”)'或'string.split(“\\ s”)'? – Nivas
@Nivas,不,不是空间。我需要分解成单词'n文本的组合 – ovnia