如何在字符串中查找无效字符或符号

时间:2017-10-27 13:23:48

标签: java string eclipse exception try-catch

我正在创建一个打印用户详细信息的程序,首先用户输入他们的详细信息,然后程序正确格式化细节并将其打印在格式化的框中。我希望程序读取字符串并查看用户是否输入了无效字符。例如,下面的代码请求用户名:

// this code below is used to find the largest string in my program, ignore if this wont interfere 

String fname = scan.nextLine(); //main scan point.
//below is used to calculate largest string inputted by the user. 
int input = 0;

int fnamelength1 = fname.length();

input = fnamelength1;
int longest = 0;
if(input > longest)
    longest = input;

如果此时用户输入@ ~~ NAME ~~ @作为他们的名字,程序当前允许...我想让程序读取用户输入的内容并打印消息,如果他们的输入不是&# 39; t correct例如包含无效符号。

编辑:

我将字母表中除字符以外的任何内容视为无效......因此任何数字或符号均无效。

VALID:

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz

同样有效:

' - . 

2 个答案:

答案 0 :(得分:1)

这可以使用String.matches方法的正则表达式来完成。在这里定义一个模式,如果字符串与您的模式匹配,那么它可以被认为是有效的:

String fname;
Scanner scan = new Scanner(System.in);
boolean invalidInput;
do{
    System.out.println("Enter a valid name");
    fname = scan.nextLine();
    invalidInput = fname.matches("[^a-zA-Z'-]]");

    if(invalidInput){
        System.out.println("That's not a valid name");
    }

}while (invalidInput);

System.out.println("Name: " + fname);

修改

使用String.matches,我们无法对无效字符进行全局搜索(在这种情况下我们想要的)。因此最好使用Matcher.find

String fname;
Scanner scan = new Scanner(System.in);
boolean invalidInput;
Pattern pattern = Pattern.compile("[^a-zA-Z'\\-\\s]");

do{
    System.out.println("Enter a valid name");
    fname = scan.nextLine();
    invalidInput = pattern.matcher(fname).find();

    if(invalidInput){
        System.out.println("That's not a valid name");
    }
}while (invalidInput);

System.out.println("Name: " + fname);

这次模式将验证字符串中任何位置的无效字符。

答案 1 :(得分:0)

一种方法是使用正则表达式以及String.matches()方法。

举个例子:

String fname;
... some code to get fname ...
boolean valid = fname.matches("[a-zA-Z]+"); 
当且仅当valid是包含字母字符且不为空的字符串时,

fname应该为真。

如果空字符串也有效,则:

 boolean valid = fname.matches("[a-zA-Z]*"); 

查找Java类Pattern以获取其他变体。