【问题标题】:How to make it so String can't be numeric如何使字符串不能是数字
【发布时间】:2015-07-03 13:53:37
【问题描述】:

如果你创建一个变量类型字符串你仍然可以输入数字。

例子:

“输入名称:123”

该名称仍被接受。怎样才能使变量名只接受字母,否则会出现错误消息?

【问题讨论】:

标签: java


【解决方案1】:

您不一定要将用户输入仅限于数字,但是您可以验证该输入以确保它符合您的期望。例如,如果你想确保你的字符串不包含任何数字,你可以这样做:

if(str.matches(".*\\d.*")){
   // contains a number
} else{
   // does not contain a number
}

【讨论】:

    【解决方案2】:

    没有任何其他库的帮助,您只需使用 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
    

    【讨论】:

      【解决方案3】:

      我不知道任何本机函数可以做到这一点,购买你可以简单地读取字符串(每个字符的字符)并询问该值是否在 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 范围之间,则此解决方案适用。

      【讨论】:

      • 如果用户输入ç或ñ怎么办?
      • 这取决于您的语言,只需在 if 语句中扩展实现即可。
      • 祝你好运,只是扩展。如果输入是纯 ASCII,则此解决方案有效,如果您需要 unicode,则使用此解决方案只是重新发明轮子。 stackoverflow.com/questions/12187645/…
      • 你的答案只有两个条件,问题只求字母。
      • 很公平,如果您在答案中添加此警告,将收回我的反对票
      【解决方案4】:

      如果使用 JTextField 或允许侦听器而不仅仅是命令行的东西,您可以防止用户使用 KeyListener 输入数字:

      userEntry.addKeyListener(new KeyAdapter() {
          @Override
          public void keyTyped(KeyEvent e) {
              if (Character.isDigit(e.getKeyChar())) {
                  e.consume();
              }
          }
      });
      

      【讨论】:

        【解决方案5】:

        您可以使用 lambda 表达式检查字符串是否为数字:

        String myString = "abcdef1234567890";
        
        if (myString.chars().allMatch( Character::isDigit ))
        

        如果字符串只包含数字,将输出 True

        【讨论】:

        • 如果任何字符都是数字而不是所有字符都是数字,我认为提问者要求它被拒绝。
        猜你喜欢
        • 1970-01-01
        • 2015-02-17
        • 1970-01-01
        • 2020-09-25
        • 1970-01-01
        • 1970-01-01
        • 2013-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多