也許不是最有效的,但你可以使用正則表達式和replaceFirst
for (int i = 0; i < arr.length; i++)
{
arr[i] = arr[i].replaceFirst("(|\\+).*$","");
}
基本上,它發現無論是空間' '
或加一審簽署+
,我們有兩個\
逃脫因爲+
也是正則表達式中的特殊符號,以及其後的任何其他字符.*
直到結尾$
,並用空字符串替換它。
如果您需要擴展代碼來捕獲其他分隔符,如可能.
,你只是分隔符添加到組與另一|
操作:
arr[i] = arr[i].replaceFirst("(|\\+|\\.).*$","");
現在,這將編譯一個新的正則表達式Pattern各循環,如果數組中有很多字符串,這絕對不是理想的。在這種情況下,你可能會考慮編譯一個單獨的模式第一外你的循環:
Pattern pattern = Pattern.compile("(|\\+).*$");
for (int i = 0; i < arr.length; i++)
{
arr[i] = pattern.matcher(arr[i]).replaceFirst("");
}
如果你想要的部分後,像這樣的正則表達式會做:
for (int i = 0; i < arr.length; i++)
{
arr[i] = arr[i].replaceFirst("^.*(|\\+)\\s*","");
}
注,如果您仍想爲「5000+」捕獲「5000」,則需要修改。
這可能是值得的,同時讓使用「\ d +」來定位號碼,就像一個獨立的通用正則表達式:
^(\\d+).*((\\d+)?)$
然後,它只是一個使用匹配器和Matcher.group挑出特定的事數字。
相關鏈接:
String documentation
Pattern documentation
Matcher documentation
Regular Expressions in Java
Wikipedia on Regular Expressions
模式和匹配器通常比String.indexOf()功能強大,但是相當昂貴是四個做簡單的字符檢測,其中indexOf更快。 – 2011-03-26 01:35:06
@DavidOlivánUbieto我完全同意,因爲我注意到我的解決方案並不是特別有效,但由於要求提供一行代碼的問題,取而代之的是滿足這一要求,並且很容易擴展其他分隔符。 – 2011-03-26 01:38:46
謝謝你,你的選擇最適合我。你能否也請修改你的例子來選擇字符串數組的最後部分(24,99,249)? – Prostak 2011-03-28 18:01:48