2015-07-03 39 views
2

如果您製作變量類型字符串,您仍然可以輸入數字。如何使它如此字符串不能是數字

實施例:

「輸入名稱:123」

名稱仍可接受。我如何製作它,所以變量名只接受字母,否則會出現錯誤信息?

+11

使用正則表達式。 – Mena

+1

或者[Guava's CharMatcher](http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/base/CharMatcher.html) – wonderb0lt

回答

5

您無法將用戶輸入限制爲數字,但您可以驗證該輸入以確保其符合您的期望。例如,如果要確保您的字符串不包含任何號碼,你可以這樣做:

if(str.matches(".*\\d.*")){ 
    // contains a number 
} else{ 
    // does not contain a number 
} 
1

我不知道任何本地函數來做到這一點,你買可以簡單地讀取的字符串(每個字符字符)並詢問該值是在65和90之間(大寫字母)還是在97和122(正常字母)之間。

的代碼將是:

String string = "ABCD"; 
    boolean hasOtherCharacters = false; 
    for (int i = 0; i < string.length();i++) 
    { 
     if (!(string.charAt(i) >= 65 && string.charAt(i) <= 90) && !(string.charAt(i) >= 97 && string.charAt(i) <= 122)) 
     { 
      hasOtherCharacters = true; 
      break; 
     } 
    } 

    if (hasOtherCharacters) 
    { 
     //WHATEVER YOU WANT 

警告:該解決方案適用,如果你的字符集是那些ASCCI範圍之間。

+0

如果用戶輸入ç或ñ,該怎麼辦? –

+0

這取決於您的語言,只需在if語句中擴展實現即可。 – Nico

+0

祝你好運*延長*。如果輸入是純ASCII的,如果你需要unicode,這個解決方案就可以工作,這樣做只是重新開始。 http://stackoverflow.com/questions/12187645/java-utf8-encoding-char-string-types –

1

無需任何額外的庫的幫助下,你只需要使用Java類模式匹配:

Pattern p = Pattern.compile("\\D*"); 

String test1 = "abc"; 
String test2 = "abc123"; 

Matcher m1 = p.matcher(test1); 
System.out.println("does test1 only contain letters? " + m1.matches());   
//prints true 

Matcher m2 = p.matcher(test2); 
System.out.println("does test2 only contain letters? " + m2.matches()); 
//prints false 
0

如果使用一個JTextField或東西,讓聽衆,而不是隻在命令行中,您可以防止用戶從輸入數字一個KeyListener的:

userEntry.addKeyListener(new KeyAdapter() { 
    @Override 
    public void keyTyped(KeyEvent e) { 
     if (Character.isDigit(e.getKeyChar())) { 
      e.consume(); 
     } 
    } 
}); 
0

你可以檢查一下使用lambda表達式的字符串是否是數字:

String myString = "abcdef1234567890"; 

if (myString.chars().allMatch(Character::isDigit)) 

如果字符串只包含數字,則輸出True

+0

我認爲提問者要求拒絕,如果任何字符是數字而不是所有字符都是數字。 – zudduz

相關問題