检查输入的名称是否包含特殊字符或数字

时间:2014-02-22 10:46:40

标签: java char

我试图在此程序中显示它检查用户键入的每个字母。如何在每次看到特殊字符或整数时避免显示程序?如果它看到至少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);
  }
}

2 个答案:

答案 0 :(得分: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);

如果您正在尝试学习如何编写代码并希望自己完成所有基础知识,这应该会很好。否则我建议使用正则表达式或模式(参见其他答案)。

答案 1 :(得分:0)

问题是您通过char检查字符串char。前五个字符(james)是有效的,因此您的代码打印name五次(每个字符一次),而最后三个字符231无效,因此您的代码打印默认名称。

所以我想用某种方法一次检查你的整个字符串而不是char的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 ]