2013-11-20 252 views
3

我遇到的問題是當我檢查字符串是否包含任何字符時,它只查看第一個字符而不是整個字符串。例如,我希望能夠輸入「123abc」,並且字符被識別,因此失敗。我還需要字符串長度爲11個字符,由於我的程序只能使用1個字符,因此無法繼續。Java - 查看一個字符串是否包含任何字符

這是到目前爲止我的代碼:

public static int phoneNumber(int a) 
{ 
    while (invalidinput) 
      { 
     phoneNumber[a] = myScanner.nextLine(); 

     if (phoneNumber[a].matches("[0-9+]") && phoneNumber[a].length() == 11) 
     { 
      System.out.println("Continue"); 
      invalidinput = false; 
     } 
     else 
     { 
      System.out.print("Please enter a valid phone number: "); 
     } 

    } 

    return 0; 
} 

例如爲什麼如果我帶走檢查看phoneNumber.length()它,如果我依然輸入「12345」,它仍然只註冊1個字符失敗。我只能輸入「1」才能繼續。

如果有人能解釋一下這是如何工作,我認爲將是巨大的

回答

5

您的regexif condition是錯誤的。使用這樣的:

if (phoneNumber[a].matches("^[0-9]{11}$")) { 
    System.out.println("Continue"); 
    invalidinput = false; 
} 

這將只允許phoneNumber[a]是長期只包括數字0-9

+1

有關Java中正則表達式的邊界匹配器的進一步閱讀:http://docs.oracle.com/javase/tutorial/essential/regex/bounds.html – Klazen108

+1

謝謝,非常有幫助 – Patch

+0

不客氣,很高興它工作正常爲你而出。 – anubhava

0

的+應該是集之外,或者你可以專門嘗試匹配這樣的11位數字:^ [0-9] {11} $(^和$錨定匹配字符串的開始和結尾)。

0

你需要把「+」後「]」在你的正則表達式一個11字符。所以,你會改變它:

phoneNumber[a].matches("[0-9]+") 
0

爲什麼不嘗試使用for循環來瀏覽每個字符?

像:

public static int phoneNumber(int a) 
{ 
    while (invalidinput) 
      { 

     int x = 0; 
     for(int i = 0; i < phoneNumber[a].length(); i++) 
     { 
     char c = phoneNumber[a].charAt(i); 
     if(c.matches("[0-9+]")){ 
     x++; 
     } 


} 
    if (x == phoneNumber[a].length){ 
    System.out.println("Continue"); 
    invalidinput = false; 

     } 
    else 
     { 
      System.out.print("Please enter a valid phone number: "); 
     } 

} 
return 0; 
} 
0

在你的電話號碼0 .. 9+合法字符?如果是這樣,那麼你應該使用正則表達式[0-9+]*,它匹配零個或多個合法字符。 (如果沒有,你可能是指[0-9]+。)另外,還可以使用[0-9+]{11}而不是你明確檢查的爲11

到您當前密碼失敗的原因的長度,是String#matches()不檢查正則表達式是否匹配部分的字符串,但是是否匹配全部是的字符串。你可以在JavaDoc中看到這個,它指向Matcher#matches(),它「嘗試按照模式匹配整個區域」。

相關問題