我试图在此程序中显示它检查用户键入的每个字母。如何在每次看到特殊字符或整数时避免显示程序?如果它看到至少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);
}
}
答案 0 :(得分:0)
您需要一个额外的变量 - 让我们称之为useDefaultName
。在循环之前,您需要将其设置为false
- 除非发生错误,否则您不希望使用默认名称。然后,如果循环中的任何位置找到无效字符,您只需将useDefaultName
设置为true
和break
即可。在循环之后,如果useDefaultName
是true
。如果是,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
这样,如果只包含字母(小写和大写),则检查整个字符串。如果是这种情况,则打印给定名称,否则打印默认名称。
如果您想允许更多字符,只需将它们添加到character class即可
例如,如果要允许空格,请将其更改为[a-zA-Z ]
。