2015-11-20 20 views
0

我想在程序繼續之前驗證用戶輸入。例如:如何使用掃描器驗證用戶輸入不通過它循環

變量字符串名稱。該程序顯示「輸入名稱」,如果用戶鍵入的是數字而不是字符串,則應彈出消息並讓用戶爲名稱指定字符串。

這是我到目前爲止有:

System.out.println("Enter name"); 
String name = input.nextLine(); 

我試圖try/catch語句,但沒有奏效。我試過使用

if(input.hasNextInt()){System.out.println("Type in a string!");} 

但是,通過程序進行,仍然分配一個數字到'名稱'。它不給用戶第二次機會分配一個字符串到'名字'

+0

也許你應該考慮使用[正則表達式(https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html)爲您的驗證?例如:['[a-zA-Z \ w] +'](https://regex101.com/r/gP7pM9/1) – mezzodrinker

+0

檢查[this](http://stackoverflow.com/questions/3059333/ validating-input-using-java-util-scanner)鏈接出來。它應該回答你的問題 – Jonah

+0

@Tarikh Chouhan試試我的答案 – Abdelhak

回答

0

這是讓你開始使用正則表達式的東西。它只檢查String,其字符在A-Za-z之間。看看當你嘗試輸入「FirstName LastName」時會發生什麼,看看你是否可以找出解決方法。

Scanner input = new Scanner(System.in); 
String name; 
while(true){ 
    System.out.println("Enter name"); 
    name = input.nextLine(); 
    if (name.matches("[A-Za-z]+")){ 
     break; 
    }else{ 
     System.out.println("Please enter only letters"); 
    } 
} 
System.out.println("Name selected: "+name); 

在支架末端的加號進行檢查,以查看是否有至少一個字符。所以如果你輸入一個空白的名字,它會去else

-1

試用此解決方案,驗證輸入彈出,當用戶輸入無效的東西。

public class Test { 

static String name; 

public static void main(String[] args) { 
    final JFrame parent = new JFrame(); 

    parent.pack(); 
    parent.setVisible(false); 
    name = JOptionPane.showInputDialog(parent, 
      "Enter name", null); 

    while (true) { 
     if (name.matches("[A-Za-z]+")) { 
      break; 
     } else { 
      name = JOptionPane.showInputDialog(parent, 
        "Please enter only letters", null); 
      if (name.matches("[A-Za-z]+")) 
       break; 

     } 
    } 
    System.out.println("Name selected: " + name); 
    } 

} 
+0

爲什麼不從一開始就彈出?而不僅僅是當用戶輸入無效的東西時。 – gonzo

+0

現在,代碼驗證輸入,當用戶輸入無效的東西時。 – Abdelhak

+0

爲什麼這會降低投票率?它是perfet – Abdelhak

0

使用String matches()方法可以實現數字檢查非常簡單。此方法告訴字符串是否與給定的正則表達式匹配。

String name = "Shrek"; 

if (name.matches(".*\\d+.*")) { 
    // Do whatever you want to do if the name contains a number 
}