验证用户输入

时间:2015-12-19 15:17:01

标签: java

我在下面编写了这段代码,我想知道是否可以验证" playername"的代码条目。我需要能够检查用户是否已将任何内容输入此字符串中,并且我想知道除了使用中断之外是否可以以任何方式执行此操作,因为它不在循环中我无法使用休息。此外,当我从用户那里获得输入时,我使用冒号作为我的字段分隔符,将用户输入拆分为数组的单独元素。我想知道是否有任何方法可以检查用户是否正在使用正确的字段分隔符。

import java.util.Scanner;

public class REQ2 {

    public static void main (String[] args) {
        String playername;       
        String line;
        String[] list = new String[100];
        int count = 0;  
        int score;
        int time;
        int totalScore =0;

        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter your name");

        playername = sc.nextLine();

        System.out.println("Please enter your game achievements (Game name:score:time played) E.g. Minecraft:14:2332");

        while (count < 100) { 
            line = sc.nextLine();

            if(line.equals("quit")) {
                 break;
            }

            list[count]=line;
            System.out.println("list[count]" + list[count]);
            count++;

            for (int i = 0; i < count; i++) {
                line = list[i];
                String[] elements = line.split(":");    
                if (line.length() != 3) {
                    System.out.println("Error please try again, Please enter in the following format: game name:score:timeplayed");
                    break;
                }
                score = Integer.parseInt(elements[1].trim());            
                time=Integer.parseInt(elements[2].trim());
            }
        }
    }
}

2 个答案:

答案 0 :(得分:3)

对于playername问题,我建议使用以下虚拟证据:

System.out.println("Please enter your name:");
int ErrCounter=0;
while(true)
{
    playername = sc.nextLine();
    if(playername!="")
        breake;
    System.out.println("No name was entered.\n Please enter your name:");
    ErrCounter++;
    if(ErrCounter>=2/*or any other count you choose*/)
        System.err.println("No name wase entered. Exiting...");
}

至于分隔符问题,您可以使用相同的系统进行校对。为了验证正确的分隔符使用情况,请使用:

if(!(line.contains(':')))
    System.out.println("Please enter achivements with the proper \":\" sepration\n"); 

答案 1 :(得分:1)

playername = sc.nextLine();使用此代码后。

 while(playername.equals(""))
 {
     playername = sc.nextLine();
 }

在变量playername的值字符串值非空白之前,这不会让程序继续

修改

如果您想在没有输入任何内容的情况下退出程序,请使用

 if(playername.equals(""))
 {
     System.exit(0);
 }

修改2

至于检查字符串中是否使用了:,请尝试在line = sc.nextLine();之后添加此代码。 (记住要使用它,你必须在Java文件的顶部调用这行代码import java.util.regex.*;

Pattern pattern = Pattern.compile(":");
Matcher  matcher = pattern.matcher(line);

int patternMatch = 0;
while (matcher.find())
{
    patternMatch++;
}

while(patternMatch!=2)
{
    patternMatch=0;

    line = sc.nextLine();

    if(line.equals("quit")){
        break;
    }

    Pattern pattern = Pattern.compile(":");
    Matcher  matcher = pattern.matcher(line);

    while (matcher.find())
    {
        patternMatch++;
    }
}