【问题标题】:Check illegal input .nextLine Java [duplicate]检查非法输入.nextLine Java [重复]
【发布时间】:2013-11-29 16:11:50
【问题描述】:

我有一个设置为 userInput.nextLine() 的字符串变量,我想检查这个字符串是否包含除数值以外的任何内容。

if(string has non-numeric) {
    break;    
}

【问题讨论】:

标签: java input error-handling


【解决方案1】:

尝试 Catch 可能是另一种替代方式。

try{
   Long.parseInt(string);

用你的数值做任何你需要做的事情。

}catch(NumberFormatException ex){

}

【讨论】:

  • 这是我最初的想法,我在 AP CS 的其他一些作业中使用过这些,但我的老师说要尽量避免使用它们,因为它们“昂贵”是真的吗?
  • 不知道“贵”,到时候请教老师,弄清楚它的“复杂性”,也试试你的问题的最坏情况。不要忘记分享...
  • 据我所知,try catch 方法实际上可能比大多数其他检查更快。解析器以 O(n) 步运行(即输​​入中的每个字母一步)并且异常运行速度非常快 O(1)(无论输入如何,它始终是 1 步)。事实上,因为许多异常是由 CPU 而不是 java 代码完成的,所以一些异常实际上可以比 if then 语句更快(尽管差异非常小,两者只需要大约百万分之一秒)。
  • @Nick 希望你得到你想要的东西。
  • @Thijser 感谢您提供的信息。
【解决方案2】:

如果您想炫耀,请使用带有正则表达式的 String.matches()。或者您可以使用 String.charAt() 逐个字符地迭代它。

【讨论】:

    【解决方案3】:

    我觉得这样就可以了

    String str1 = "123456";
            System.out.println(str1.matches("[^0-9]+"));
    

    输出将是false

    如果你这样做了

    System.out.println(str1.matches("[0-9]+"));
    

    输出将是true

    【讨论】:

      【解决方案4】:

      使用string.matches(regex) 函数。正则表达式为\\d+,并检查输出为false

      1. \d 被称为Predefined Character Classes 和表达式X+:表示X 出现一次或多次,称为Quantifiers

      2. 1234563查看Pattern class documentation 了解有关此表达式的更多详细信息。 1234563 em> 喜欢"1254""-.256""+58.235" 等。

      选择任何一种模式,以满足您的需求,而不是匹配您的输入字符串检查它会导致 false: 意味着不是有效的数字输入。

      String pattern = "[\\+\\-]?(\\d+|\\d*\\.\\d+)" ; // or only \\d+ 
                                                      //or [\\+\\-]?\\d+
          if(!string.matches(pattern)) // not a valid numeric input    {
      
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-24
        • 1970-01-01
        • 2019-03-19
        • 2020-11-14
        • 1970-01-01
        • 2011-11-19
        • 2016-11-19
        • 2017-01-31
        相关资源
        最近更新 更多