2011-07-16 48 views
4

我想在java(android)中拆分電子郵件字符串,但它無法正常工作。無法獲得String.split()在Android上的預期工作

Input: "[email protected]" 
String[] pattens = email.split("@."); 
Expected: "ihnel48", "gmail", "com" 
Output: "ihnel48" "mail.com" 
+2

當然它的作品。你只是沒有正確使用它。 –

+1

這個問題與android沒有任何關係。 –

+0

好的,我明白了。使用正則表達式會更好。 –

回答

11

因爲String.split根據regular expression比賽,@.意味着它看起來字符在一行(不要麼字符一旦)。而且,.正則表達式中是一個特殊字符,意思是「什麼」:

@. = "@ and then any character" 

在你的情況下,這個「@g」和點相匹配。

相反,你想:

String[] pattens = email.split("[@.]"); 

的方括號,[],創建人物類,它代表所有有效字符一個位置可以匹配。所以,你需要匹配「@」或「.」。字符.不需要在字符類中轉義。

+0

尼斯!你真的治癒了我20分鐘的頭痛!多謝,夥計 –

1

.匹配g,即g也將被刪除

0

在我看來就像它的工作完美。你給它一個正則表達式,表示查找字符「@」後跟任何字符(這是「。」在正則表達式中的含義)。這就是它發現和分裂的原因。

我不是正則表達式wonk,但我認爲也許「@ | \」。會做你明顯想要的。

+0

那麼你如何尋找一個正則表達式的時期? – Amplify91

+0

你需要使用反斜槓來轉義。像'\ .'。看到我的回答 – Paulpro

0

嘗試:

String[] pattens = email.split("@"); 
0

你想拆就@或。我相信。

爲正確的正則表達式是:"@|\."

編輯:把括號,而不是報價的最初

3

你必須逃脫週期(.)。否則它是通配符,並且會匹配任何單個字符。逃避它的方式是反斜槓。在Java中的字面字符串中,反斜槓也是轉義字符,所以您必須使用兩個反斜槓。此外,您需要某種「或」運算符來告訴它在遇到.@時進行拆分。有兩種方法可以做到這一點。

這裏有一個:

String[] pattens = email.split("@|\\."); 

下面是另一個:

String[] pattens = email.split("[@\\.]"); 
0

有趣的解決方案:

 //Replace all "." to "@", and split 
    String split(String input){ 
     String[] patterns = input.replaceAll("\\.", "@").split("@"); 
     return Arrays.toString(patterns); 
    } 
0

試試這個代碼

StringTokenizer tokens = new StringTokenizer(CurrentString, "@"); 
String first = tokens.nextToken(); 
String second = tokens.nextToken();