【问题标题】:Take input and then cast into appropriate data type - Java接受输入,然后转换为适当的数据类型 - Java
【发布时间】:2015-06-08 20:10:45
【问题描述】:

我正在尝试创建一种方法,该方法从用户那里获取任何数据类型的输入,然后将该输入转换为变量类型。但我的代码总是返回字符串类型。需要修复吗?

Scanner x = new Scanner(System.in);
Object a = x.next();

这是我检测对象类型的方法

public static String inputValidator(Object input)
{
    if(input.getClass().getName().equals("java.lang.String"))
    {
        return "string";
    }
    else if(input.getClass().getName().equals("java.lang.Integer"))
    {
        return "integer";
    }
    return "nor";


}

【问题讨论】:

  • 字节可以解释为任何东西。
  • next 返回一个String。 Java 是强类型的,而不是鸭子类型的。这不起作用。
  • 好的,那么我的代码的哪一部分需要更改?我想接受输入。我应该写什么呢?
  • 您能否举例说明您希望它如何工作?什么输入你想要什么输出?
  • 我正在尝试从用户那里获取输入“任何内容”,这些输入将被分配为 Object 并检测 classType。

标签: java


【解决方案1】:

这不是正确的方法,因为Scanner.next() 返回一个String。如果您正在寻找原语或一些“基本”类型,那么您可以使用适当的方法,例如 nextByte()nextBigDecimal()

即使用您当前的实现,您将永远无法到达检查 Integerelse if 块。

如果您对数字最感兴趣,请查看以下内容: How to check if a String is numeric in Java

让我们说 String ,int 和 double 而已

如果性能不是什么大问题,并且您正在寻找一个简单的解决方案,那么我建议您使用:

if (isInteger(string)) {
    // is an integer
} else if (isDouble(string)) {
    // is a double 
} else {
    // is a string
}

public static boolean isDouble(String string) {
    try {
        double d = Double.parseDouble(string);
    } catch (NumberFormatException nfe) {
        return false;
    }
    return true;
}

public static boolean isInteger(String string) {
    try {
        double d = Integer.parseInt(string);
    } catch (NumberFormatException nfe) {
        return false;
    }
    return true;
}

注意:这里的调用顺序很重要,你必须在 isDouble() 之前调用 isInteger() 因为整数字符串也是双字符串。

【讨论】:

  • 你想达到什么目的? @Barett 提到的另一个问题可能会有所帮助?
  • 请查看我更新的帖子,“我正在尝试从用户那里获取输入'任何东西',这些输入将被分配为对象并检测类类型”
  • @Munna 正如我之前提到的,你得到的只是String。您是否打算能够识别整数、双精度数、布尔值、日期等?我会说您必须定义要检查的类型列表。
  • 正是我希望能够识别。我怎样才能做到这一点?
  • @Munna 您能否提供您希望能够解析的类型的完整列表?
猜你喜欢
  • 2016-03-14
  • 2013-11-06
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多