【问题标题】:integer float string differentiation programmatically以编程方式整数浮点字符串微分
【发布时间】:2017-05-10 05:05:37
【问题描述】:

我想区分 int/float/string 输入,我正在尝试读取输入

Scanner scan = new Scanner(System.in);

这提供了字符串格式的输入,如果我想检查输入是整数/浮点数还是字符串,我该怎么做? 我做了这样的事情

try{
 float i = Float.parseFloat(scan.nextLine());
 if(i%1==0){
  then it is integer
 }else{
  it is float
 }
}catch (NumberFormatException e)
 something else, may be string
}

但是 java 是否提供了任何方法或方式来以编程方式识别输入是否为 string/int/float。

【问题讨论】:

  • 您必须定义“是输入字符串、整数还是浮点数”的含义。首先,每个输入都是一个字符串。所以我假设通过“字符串”你只看你不想算作整数或浮点数的字符串。那么哪些字符串算作整数呢? “20.0”是整数吗? “22222222222”对于int 来说太大但适合long,怎么样? “2222222222222222222222”对于long 来说太大了,但可以放在float 中(精度损失)? “0x1234”怎么样? “1.25e2”(等于 125)?

标签: java string types floating-point integer


【解决方案1】:

而不是读取 String 然后将其解析为 Float 然后检查它的整数。

您可以简单地使用 Scanner 类的 hasNext 函数,如下所示的整数。

if(sc.hasNextInt()){
    int n = sc.nextInt();
    System.out.println("n... "+n);
}

如果你想要完全匹配,你可以试试下面:

    String str = sc.nextLine();
    try{
        int a = Integer.parseInt(str.trim());
        System.out.println("It's Integer");
    }catch(Exception ex)
    {
        try{
            Float f = Float.parseFloat(str.trim());
            System.out.println("It's Float");
        }catch(Exception e){
            System.out.println(str);
        }           
    }

【讨论】:

  • 我忘了补充一点,我使用了 hasNextInt 和 hasNextFloat 方法,最后看到这两个方法都返回 true 的整数,并且只有当值是 float 时才会进入 hasNextFloat。这仍然没有说服力
  • @sunil.kms123 “仍然没有说服力”是什么意思?
  • 我的意思是,不能精确地确保给定的值是整数或浮点数
  • @sunil.kms123 那么是否有用户可以输入的“整数”值,hasNextInt 不会认为是整数?我还没有看到您要查找的内容的准确定义。
  • @ajb .. 上下文是我想以编程方式区分输入,我必须将输入区分为也可以浮动的整数。如果你能告诉我哪个可以区分我会很高兴
【解决方案2】:

据我所知,没有任何东西可以提供直接检查。

您可以使用 Integer.parseInt 并捕获 NumberFormatException。异常告诉您它不是整数。 同样,usr Float.parseFloat。如果两者都抛出异常,则您的输入是一个字符串。

【讨论】:

  • 是的,正如我在我的问题中所做的那样,但有兴趣知道 java 是否提供了其他可用或缺少的东西
【解决方案3】:

您可以在Scanner 中使用hasNextFoo 方法。例如,

if(scan.hasNextInt()){
    System.out.println(scan.nextInt() + " is int");
}else if(scan.hasNextFloat()){
    System.out.println(scan.nextFloat() + " is float");
}else{
    System.out.println(scan.next() + " is String");
}

【讨论】:

    【解决方案4】:

    java.util.Scanner 类具有验证用户输入是否属于某种类型的方法

    Scanner userInput = new Scanner(System.in);
                boolean hasNextInt = userInput.hasNextInt();
    

    如果用户输入整数,则返回 true。

    boolean hasNextDouble = userInput.hasNextDouble();
            System.out.println(hasNextDouble);
    

    如果用户输入 double,则返回 true。否则为假

    【讨论】:

      【解决方案5】:

      Scanner 类有 couple of methods,您可以使用它来确定下一个元素的类型。

      hasNextBigDecimal()
      hasNextBigInteger()
      hasNextBoolean()
      hasNextByte()
      hasNextDouble()
      hasNextFloat()
      hasNextInt()
      hasNextLine()
      hasNextLong()
      hasNextShort()
      

      你可以像这样简单地使用它们

      if(sc.hasNextInt()) {
          System.out.println(sc.nextInt() + " is an Integer.");
      }
      else if(sc.hasNextBoolean()) {
          System.out.println(sc.nextBoolean() + " is a Boolean.");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-06
        • 2010-12-10
        • 2018-06-01
        • 2020-09-06
        • 1970-01-01
        • 2017-07-21
        • 2015-07-18
        • 1970-01-01
        相关资源
        最近更新 更多