【问题标题】:Check if string taken with Scanner.next() contains number检查使用 Scanner.next() 获取的字符串是否包含数字
【发布时间】:2014-07-27 16:40:13
【问题描述】:

我想使用 Scanner.next() 获取一个字符串,看看它是否包含数字。我使用正则表达式来检查字符串是否包含除数字以外的任何内容。如果字符串是硬编码的,则正则表达式可以正常工作,但从键盘获取时则不能。我希望输入 5 被检测为数字,但事实并非如此。请告诉我为什么。我的代码:

import java.util.Scanner;

public class Error {

    public static void main(String[] args) {

        Scanner inp = new Scanner(System.in);
        int num = 0;
        String input = "";
        boolean isStringNumber = true;

        System.out.println("\nPlease enter a number only...");
        input = inp.nextLine();

        isStringNumber = input.contains("[^0-9]+");

        if (isStringNumber == false) {
            System.out.println("\nYou entered a non number " + input);
        }

    }

}

【问题讨论】:

  • foo5 的结果是什么?对或错。
  • 有什么理由不使用Scanner.hasNextInt()?如果该行可以解释为整数值,它将返回 true。如果您尝试测试该行是否仅包含一个数字(也可能是其他文本),那么其他答案之一应该可以。
  • nextInt 用于整数, nextLine 用于字符串。没有指向你@RyanJ
  • 再次阅读评论。我不是这么说的。
  • @RyanJ - 我不会使用 nextInt 因为我想检查用户是否输入了退出字符串。因此,只取字符串。

标签: java regex java.util.scanner


【解决方案1】:

contains 使用 String 文字作为其参数。请改用matches

isStringNumber = input.matches("[0-9]+");

或者干脆

isStringNumber = input.matches("\\d+");

顺便说一句:Scanner 有一个nextInt 接受整数值的方法

【讨论】:

  • 我不会使用 nextInt 因为我想检查用户是否输入了退出字符串。因此,只取字符串。
  • 好的,所以contains 认为它的输入只是一个字符串而不是正则表达式模式。明白了。
【解决方案2】:

改为isStringNumber = input.contains("[^0-9]+");

试试isStringNumber = input.matches("[0-9]+");

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 2010-12-19
    • 1970-01-01
    • 2022-06-30
    相关资源
    最近更新 更多