2013-08-01 164 views
-2

我試圖把一個字符串,並從一個字符刪除所有字符到另一個如何在某些位置刪除字符串中的某些字符?

例字符串:

String personAndPhone = " Dave (206515608)" 

我想這個字符串轉換成兩個字符串,這個人的名字和電話號碼(沒有「()」)。

我該怎麼辦?

+0

提示:'substring()' –

+0

@NarendraPathai:No. – Qix

回答

3

試試這個

String a[] = personAndPhone.trim().replaceAll("[()]", "").split(" "); 

a[0] -> Dave 
a[1] -> 206515608 
2

我注意到你周圍有空間,所以我要做的第一件事就是修剪。

personAndPhone = personAndPhone.trim(); 

接下來,你有一個在中間的空間,這可能是一個很好的分裂點。

String[] tokens = personAndPhone.split(" "); 

String name = tokens[0]; 
// now contains: Dave 

接下來,你可以從數字中的括號去掉:

String number = tokens[1].replaceAll("[()]", ""); 

// now contains: 206515608 

或者作爲@EvgeniyDorofeev更簡明地說:

String[] tokens = personAndPhone.trim().replaceAll("[()]", "").split(" "); 
String name = tokens[0]; 
String number = tokens[1]; 
2

我'傾向於使用正規快遞離子做這樣的事情: -

String personAndPhone = " Dave (206515608)" 
Pattern pattern = Pattern.compile("([A-Za-z]+)\s\(([0-9]+)\)"); 
Matcher matcher = pattern.matcher(personAndPhone); 

String name = matcher.group(1) 
String number = matcher.group(2) 

可以很明顯的讓你需要你的正則表達式更復雜一點。這可以讓你解析更嚴格一點。用正則表達式還可以更精確地控制精度和長度檢查。

參見http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html

+0

名稱模式可能太簡單了... – assylias

+0

雖然我已經提到並提供了使它更加複雜的方法的文檔,正則表達式是不靠譜的學習和勺子餵養是不是一定要幫助每一個好辦法。這將使問這個問題的人瞭解一個不同的角度來解決他的問題,並給他/她提高了它自己的需求的一種方法。 – chrisw

+0

可以很容易地'\ S *(\ W +)\ S * \((\ d +)\)'或甚至'\ S *(\ W +(:?\ S \ W +))\ S * \((\ d +)\)'作爲名/姓。 – Qix

3

使用正則表達式:

String name = str.replaceAll("\\s*(.*)\\s*\\(.*", "$1"); 
String phone = str.replaceAll(".*?\\((.*)\\).*","$1"); 

這些線的這兩個替換整個輸入與第1組,其捕獲對象。

「名稱」是括號內的所有內容,不包括任何一端的空格,所以它會捕獲「John Smith 3rd」沒有問題。

的 「手機」 是第一個和最後一個括號之間的一切,所以它會捕捉 「(01)5678 9876」,從 「戴夫((01)5678 9876)」。

+0

+1;無論是這個還是@ chrisw69的答案,取決於用例。我還建議在第一組中使用'。+','[^ \ s] +',甚至是'\ w +',具體取決於。另外,如果第一個/第二個正則表達式(分別)中的第二個/第一個組只是數字,則使用'\ d +'。 – Qix

+1

@Qix如果名字有空格,如果手機有空格和/或括號,該怎麼辦?請參閱我答案中的文字。 – Bohemian

+0

>',取決於。只要他需要他們就可以選擇。 – Qix