2012-10-08 31 views
0

我在Java中的字符串,以這種格式保存數據字符串中的字符:Java的檢索括號

String x = "xxxxxx xxxxxx xxxxxx (xxx)"; 

如何設置該字符串的值,只是在括號中的字符,不包括括號? (請注意,字符大小在每種情況下都會有所不同)。

+3

使用String.split方法.. –

+0

@RohitJain如何,究竟你會使用分割方法?它你做了,它會有點複雜。 – Bohemian

+0

@Bohemian ..不是那麼複雜..看到我的回答如下.. –

回答

6

單線解決方案是使用String.replaceAll()和適當的正則表達式捕獲整個輸入(有效地替換整個輸入),但也捕獲(非貪婪)作爲組1的部分,然後放回該基團:

String part = x.replaceAll(".*\\((.*?)\\).*", "$1"); 

僅供參考,在正則表達式的字符串雙背斜線是單斜線中的正則表達式,其然後逸出的字面括號中的正則表達式

這裏的一些測試代碼:

public static void main(String[] args) { 
    String x = "xxxxxx xxxxxx xxxxxx (xxx)"; 
    String part = x.replaceAll(".*\\((.*)\\).*", "$1"); 
    System.out.println(part); 
} 

輸出:

xxx  
+0

現在應該可以正常工作,但''是什麼? –

+0

你是什麼意思''? – Bohemian

+1

'公共靜態' –

3

regex將做到這一點,但我的正則表達式福較弱。非正則表達式的方法如下:

int firstIndex = x.indexOf("("); 
x = x.substring(firstIndex+1, x.length()-1); 

編輯:正如在評論中指出,如果有任何其他的括號中的數據,比在其他結束,這是不行的。您需要使用以下代替:

int firstIndex = x.lastIndexOf("(", x.length()-6); 
x = x.substring(firstIndex+1, x.length()-1); 

編輯2:剛剛重讀並意識到關閉paren是最後一個字符。所以沒有必要獲得第二個索引。

+2

如果輸入是「abc)def(ghi)」,那麼你的解決方案將不起作用。實際上它會拋出異常。 – Bohemian

+1

是的。這是最大的問題,爲什麼你提出的正則表達式更好。從他解釋這個問題的方式來看,我認爲只有在最後纔會發生parens。如果這不是真的,那麼我可能已經填充indexOf的第二個參數來防止它看起來太快,或者使用lastIndexOf。 – KBKarma

+1

因爲我似乎無法編輯我的評論,所以我會將其放在這裏:我編輯了我的答案以防止發生這種情況。另外,由於最後一個字符是')',所以不需要計算第二個索引。只需使用length-1,並且子字符串方法將在')'之前停止。 – KBKarma

1

您可以使用這種提取方法String.split ..

String x = "xxxxxx xxxxxx xxxxxx (xxx)";  
String[] arr = x.split("\\("); 

x = arr[1].substring(0, arr[1].indexOf(")")); // To remove the trailing bracket. 

System.out.println(x);