2014-02-22 64 views
-1

我試圖在此程序中顯示它檢查用戶類型的每個字母。如何避免每次看到特殊字符或整數時顯示程序?如果它看到至少1個錯誤,則默認名稱是Mang Jose。檢查輸入的名稱是否有特殊字符或數字

例子:

Enter name: james231 
output: 
james231 
james231 
james231 
james231 
james231 
Mang Jose 
Mang Jose 
Mang Jose 

正確的輸出應該是:

Enter Name: james231 
output: 
Mang Jose 

for(int i=0; i< name.length(); i++) { 
    if(!(name.charAt(i) >='A' && name.charAt(i) <= 'Z' || name.charAt(i) >='a' && name.charAt(i) <= 'z' || name.charAt(i) == ' ')) { 
    System.out.println("Name: Mang Jose"); 
    } else if(name.charAt(i) >='A' && name.charAt(i) <= 'Z' || name.charAt(i) >='a' && name.charAt(i) <= 'z' || name.charAt(i) == ' ') { 
    System.out.println("\nName: "+name); 
    } 
} 
+0

您可以使用'Character'類中的方法:'Character.isSpace()'等等,這會讓您的程序更輕鬆。另外,如果你使用番石榴,考慮'CharMatcher'。最後,你也可以使用正則表達式。 – fge

回答

0

你需要一個額外的變量 - 姑且稱之爲useDefaultName。在循環之前,您需要將其設置爲false - 除非發生錯誤,否則不想使用默認名稱。然後,如果循環中的任何地方發現無效字符,則可以簡單地將useDefaultName設置爲truebreak。循環後,如果useDefaultNametrue。如果是這樣,System.out.println("Name: Mang Jose");否則輸出name

您的代碼將是這樣的:

boolean useDefaultName = false; 
for(int i=0; i< name.length(); i++) 
{ 
    if(!(name.charAt(i) >='A' && name.charAt(i) <= 'Z' || name.charAt(i) >='a' && name.charAt(i) <= 'z' || name.charAt(i) == ' ')) 
    { 
     useDefaultName = true; 
     break; 
    } 
} 
if (useDefaultName) 
    System.out.println("Name: Mang Jose"); 
else 
    System.out.println("Name: " + name); 

,如果你想學習如何編寫代碼,並希望做所有的基本知識自己的這應該是不錯的。否則,我會建議使用正則表達式或模式(請參閱其他答案)。

0

問題是你用char檢查你的字符串char。前五個字符(james)是有效的,因此您的代碼會打印五次(每個字符一次)name,而最後三個字符231無效,因此您的代碼會打印默認名稱。

所以我會去某種方式一次檢查您的整個字符串,而不是char字符。

您可以使用regular expressions此:

Pattern p = Pattern.compile("[a-zA-Z]+"); 
String name = "james231"; //use your userinput here! 

if(p.matcher(name).matches()) { 
    System.out.println("Name: " + name); 
} else { 
    System.out.println("Name: Mang Jose"); 
} 

//prints: 
//Name: Mang Jose 

demo @ ideone

這樣您檢查整個字符串,如果它僅包含字母(小寫和大寫)。如果是這種情況,它會打印給定的名稱,否則會打印默認名稱。

如果您想允許更多字符,只需將它們添加到character class即可。
例如,如果您想允許空格,請將其更改爲[a-zA-Z ]

相關問題