【问题标题】:Java - Scanner doesn't read string with space (Solved)Java - 扫描仪不读取带空格的字符串(已解决)
【发布时间】:2019-12-09 05:01:34
【问题描述】:

我正在尝试允许仅使用字符 a-zA-Z 进行的输入并且还有空格。示例:“查克·诺里斯”。 以下代码发生的情况是扫描仪input.next() 不允许上述示例输入字符串。

我希望这个输出:Success! 但这是实际输出:Again:

try {
    String input_nome = input.next();            // Source of the problem

    if (input_nome.matches("[a-zA-Z ]+")) {
        System.out.print("Success!");
        break;
    } else {
        System.err.print("Again: ");
    }
} catch (Exception e) {
    e.printStackTrace();
}

解决方案

问题的根源在于使用的扫描仪方法。

String input_nome = input.next();            // Incorrect scanner method
String input_nome = input.nextLine();        // Correct scanner method

解释: https://stackoverflow.com/a/22458766/11860800

【问题讨论】:

  • 如答案之一所述,您的代码工作正常,因此如果您得到错误的结果,问题与您的 reg exp 模式无关。

标签: java regex string input java.util.scanner


【解决方案1】:

字符串 t = "查克·诺里斯";

t.matches("[a-zA-Z ]+")

实际上返回 true。检查您的输入,它实际上是“Chuck Norris”,并确保空格不是一些奇怪的字符。您也可以使用 \s 来代替空格。我也推荐 101regex.com

【讨论】:

  • 感谢您的观点!它阻止了我只关注正则表达式并意识到问题可能出在扫描仪上?
  • 很高兴能帮上忙!
【解决方案2】:

请参考此链接: Java Regex to Validate Full Name allow only Spaces and Letters

你可以使用下面的正则表达式

String regx = "^[\\p{L} .'-]+$";

这应该适用于所有场景和 unicode。

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2011-08-23
    • 2015-10-23
    • 1970-01-01
    相关资源
    最近更新 更多