【发布时间】:2015-07-03 13:53:37
【问题描述】:
如果你创建一个变量类型字符串你仍然可以输入数字。
例子:
“输入名称:123”
该名称仍被接受。怎样才能使变量名只接受字母,否则会出现错误消息?
【问题讨论】:
-
使用正则表达式。
标签: java
如果你创建一个变量类型字符串你仍然可以输入数字。
例子:
“输入名称:123”
该名称仍被接受。怎样才能使变量名只接受字母,否则会出现错误消息?
【问题讨论】:
标签: java
您不一定要将用户输入仅限于数字,但是您可以验证该输入以确保它符合您的期望。例如,如果你想确保你的字符串不包含任何数字,你可以这样做:
if(str.matches(".*\\d.*")){
// contains a number
} else{
// does not contain a number
}
【讨论】:
没有任何其他库的帮助,您只需使用 Java 模式匹配器:
Pattern p = Pattern.compile("\\D*");
String test1 = "abc";
String test2 = "abc123";
Matcher m1 = p.matcher(test1);
System.out.println("does test1 only contain letters? " + m1.matches());
//prints true
Matcher m2 = p.matcher(test2);
System.out.println("does test2 only contain letters? " + m2.matches());
//prints false
【讨论】:
我不知道任何本机函数可以做到这一点,购买你可以简单地读取字符串(每个字符的字符)并询问该值是否在 65 和 90(大写字母)或 97 和 122(普通字母)之间。
代码是:
String string = "ABCD";
boolean hasOtherCharacters = false;
for ( int i = 0; i < string.length();i++ )
{
if ( !(string.charAt(i) >= 65 && string.charAt(i) <= 90) && !(string.charAt(i) >= 97 && string.charAt(i) <= 122) )
{
hasOtherCharacters = true;
break;
}
}
if ( hasOtherCharacters )
{
//WHATEVER YOU WANT
警告:如果您的字符集介于这些 ASCCI 范围之间,则此解决方案适用。
【讨论】:
如果使用 JTextField 或允许侦听器而不仅仅是命令行的东西,您可以防止用户使用 KeyListener 输入数字:
userEntry.addKeyListener(new KeyAdapter() {
@Override
public void keyTyped(KeyEvent e) {
if (Character.isDigit(e.getKeyChar())) {
e.consume();
}
}
});
【讨论】:
您可以使用 lambda 表达式检查字符串是否为数字:
String myString = "abcdef1234567890";
if (myString.chars().allMatch( Character::isDigit ))
如果字符串只包含数字,将输出 True
【讨论】: