簡體   English   中英

我如何檢查用戶輸入是否不是java中的字符串

[英]How can i check if the user input is not string in java

我希望我的程序只接受字符串並在用戶輸入無效時提示消息。

import java.util.Scanner;
public class Details{

    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String lastname;
        String firstname;
        String middlename;

        System.out.print("Enter Number of passenger : ");
        int passenger = input.nextInt(); 

        for(int x = 0 ; x < passenger ; x++){
            do{
                System.out.print("\nEnter Lastname  :");
                lastname = input.nextLine().trim();

                if(lastname.equals("") || lastname.equals(" "))
                {                 
                    System.out.print("\nEnter Neccessary Details");               
                }
            } while(lastname.isEmpty());

            do{
                System.out.print("\nEnter Firstname : ");
                firstname = input.nextLine();

                if(firstname.equals("") || firstname.equals(" "))
                {
                    System.out.print("\nEnter Neccessary Details");    
                }
            } while(firstname.isEmpty());

            do{
                System.out.print("\nEnter Firstname : ");
                middlename = input.nextLine();

                if(middlename.equals("") || middlename.equals(" "))
                {
                    System.out.print("\nEnter Neccessary Details");    
                }
            }while(middlename.isEmpty());

        }//end of forloop

    }
}

我已經嘗試過這段代碼,起初它可以工作,但從長遠來看它會顯示邏輯錯誤。 給我一個這樣的輸出。

    sample output
    Enter Firstname  : // the problem is, it seems has already have an input
    Enter Neccessary Details
    Enter Firstname  :

那么我該如何解決這個問題? 有沒有其他方法來驗證字符串輸入? 請保持簡單我只是一個初學者謝謝

您可以使用trim()方法刪除字符串開頭和結尾的所有空格,然后檢查它是否為空:

firstname = input.nextLine().trim();

編輯:此代碼似乎可以按您的需要工作:

import java.util.Scanner;

public class Details {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String lastname;
        String firstname;
        String middlename;

        System.out.println("Enter Number of passenger : ");
        int passenger = input.nextInt();
        input.nextLine();

        for (int x = 0; x < passenger; x++) {
            do {
                System.out.println("Enter Lastname  :");
                lastname = input.nextLine().trim();
                if (lastname.isEmpty()) {
                    System.out.println("\nEnter Neccessary Details");
                }
            } while (lastname.isEmpty());

            do {
                System.out.println("Enter Firstname : ");
                firstname = input.nextLine().trim();
                if (firstname.isEmpty()) {
                    System.out.println("\nEnter Neccessary Details");
                }
            } while (firstname.isEmpty());

            do {
                System.out.println("Enter Middlename : ");
                middlename = input.nextLine().trim();
                if (middlename.isEmpty()) {
                    System.out.println("Enter Neccessary Details");
                }
            } while (middlename.isEmpty());
        }
    }
}

這里的主要變化是我用System.out.print替換了System.out.println System.out.print僅在以下input.nextLine()讀取完成后才以某種方式打印( System.out.flush打印后立即不起作用),因此您似乎在輸入開始時按 Enter 按鈕,並且該空行由Scanner讀取。 此外,我在讀取passenger數量后立即添加了input.nextLine()行,因此Scanner在讀取該數字后轉到下一行。

因為Scanner.nextInt方法不會讀取您輸入中的換行符,所以您需要使用nextInt之后的行:

int passenger = input.nextInt();
input.nextLine();

這將解決它似乎已經有輸入問題。

有關詳細信息,請參閱內容。

由於多次使用相同的掃描儀,掃描儀似乎有問題。 嘗試以如下方法使用掃描儀:

public String getInput () {

Scanner sc = new Scanner(System.in);
return sc.nextLine(); 
}

然后使用

firstname = getInput();

您似乎想要創建多個乘客,而不僅僅是一個. 所以你肯定需要多個lastNamefirstName 所以創建一個有名字和姓氏的類Passenger 然后使用List<Passenger>並在外循環的每次迭代中創建一個新的Passenger

所以你應該這樣做:

class Passenger {
    String lastname;
    String firstname;
    String middlename;
}

現在在你的main你需要一個List<Passenger>

List<Passenger> passengers = new ArrayList<>();

現在我建議從你的三個 do-while 循環中提取一個方法,以便有一個單一的驗證方法:

String getInput(String kind) {
    String result;
    do{
        System.out.print("\nEnter " + kind + " : ");
        result = input.nextLine().trim();
    } while(result.isEmpty());
}

最后將其放入main的循環中,並在每次迭代時創建一個新的Passenger ,如上所述:

static void main(String[] args) {
    List<Passenger> passengers = new ArrayList<>();
    Scanner input = new Scanner(System.in);

    System.out.print("Enter Number of passenger : ");
    Integer numPassengers = input.nextInt(); 

    for(int x = 0; x < numPassengers; x++){
        String firstName = getInut("FirstName");
        String lastName = getInput("LastName");
        String MiddleName = getInput("MiddleName");
        passengers.add(new Passenger(firstName, lastName, middleName);
    }
}

當然,您需要一個接受三個String -args 的Passenger類的構造函數。 此外,您永遠不應該像我上面那樣公開公共字段,而是使用公共獲取方法。 所以你的類應該是這樣的:

class Passenger {
    String firstName;
    String lastName;
    String middleName;

    public Passenger(String firstName, lastName, middleName) { // constructor
        this.firstName = firstName;
        this.lastName = lastName;
        this.middleName = middleName;
    }

    public String getFirstName { return this.firstName; }
    public String getLastName { return this.lastName; }
    public String getMiddleName { return this.middleName; }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM