2011-03-25 39 views
1

我有以下字符串數組(quantityInForPriceBandPopUp [3])的數據:卸下一切(IndexOfAny和刪除)

10 - 24 
25 - 99 
100 - 249 
5000+ 

在C#,如果我把這種陣列通過這樣的:

quantityInForPriceBandPopUp[i] = quantityInForPriceBandPopUp[i].Remove(quantityInForPriceBandPopUp[i].IndexOfAny(new char[] { ' ', '+' })); 

我得到這個:

10 
25 
100 
5000 

如何達到在Java中同樣的結果?理想情況下,我正在尋找一個單線答案。如果不可能,那麼最短的工作。

回答

1

也許不是最有效的,但你可以使用正則表達式和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

+0

模式和匹配器通常比String.indexOf()功能強大,但是相當昂貴是四個做簡單的字符檢測,其中indexOf更快。 – 2011-03-26 01:35:06

+0

@DavidOlivánUbieto我完全同意,因爲我注意到我的解決方案並不是特別有效,但由於要求提供一行代碼的問題,取而代之的是滿足這一要求,並且很容易擴展其他分隔符。 – 2011-03-26 01:38:46

+0

謝謝你,你的選擇最適合我。你能否也請修改你的例子來選擇字符串數組的最後部分(24,99,249)? – Prostak 2011-03-28 18:01:48

2

沒有有效的單行答案,因爲java.lang.String API中沒有與indexOfAny直接等價的答案。

這是幾行中的一個高效等價物。

int pos = Math.min(Math.max(s.indexOf(' '), -1), Math.max(s.indexOf('+'), -1)); 
if (pos != -1) { 
    s = s.substring(0, pos); 
} 

而且你可以很容易地把它變成一個靜態輔助方法。

2

看一看 http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/StringUtils.html

它具有indexOfAny方法和更多的字符串方法

+0

具體來說,IndexOfAny方法。 – 2011-03-26 01:50:39

+0

我看不到如何使用您的鏈接。在Eclipse中,當我導入java.lang.Object或org.apache.commons.lang.StringUtils並使用indexOfAny時,我得到以下錯誤:'方法indexOfAny()未定義類型字符串。 – Prostak 2011-03-28 17:34:13

+0

@Prostak您可能需要單獨下載Apache Commons庫。它不作爲Java的一部分捆綁在一起。 – 2011-03-28 19:28:52