[英]Split string by space, Java
這是一個字符串:
String s = "119 days 6 hours 13 minutes 24 seconds";
如何進行拆分以獲得這樣的數組:
{
"119 days",
"6 hours",
"13 minutes",
"24 seconds"
}
我不知道該怎么做。
我尋找了String.split()
並嘗試了[az]\\s
regExp,但是它剪切了最后一個字符
針對這種特定情況的一種方法是使用負向后查找來拆分。
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]
您所走的路是正確的,但是您需要使用零寬度匹配器組,以免它們被吞下,因此類似:
input.split(" (?=[0-9])");
有兩種解決方案,首先,您可以使用
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.