从String的值中查找对象的类型

时间:2014-03-01 19:43:27

标签: java

我需要一种方法来返回对象的类型(作为字符串或对象的类,以较容易的方式)给定带有值的字符串。 我可以用我想要的每种类型解析它,但是存在与之相关的问题(例如,int也可以解析为long,float可以解析为double)。这是我的草图:

private String typeOf(String test) {
    if (test == "true" || test == "false")
        return "boolean";
    else if (// its a number)
        // figure out a way to parse all number types?
        // return corresponding type
    else
        // can't be parsed with any boolean or number types... just a string
        return "string";
}

我正在检查的类型是:String,long,int,short,byte,byte [],float和double。 请记住,我需要SPECIFIC类型才能完成此程序的make-or-break功能。任何帮助表示赞赏。

我正在尝试创建一个命名二进制标记(规范here),它包含用户输入(JOptionPane - 输入对话框)给出的特定类型的数据。为了制作正确类型的标签,我需要知道给定数据的类型。 (有没有办法从用户那里获得完全避免String问题的用户输入?)首先使用String作为我的问题的主要来源。

3 个答案:

答案 0 :(得分:3)

启动字符串检查不正确。除此之外,请考虑不同的数据类型及其可能的值。

int或Integer的可能值都在long的范围内。 Floats和Doubles也是如此。您需要确定哪个数据类型的范围是其子集并按该顺序进行测试。作为一个例子,这里是一个快速的snippit,用于测试Integers和Longs。

private String typeOf(String suppliedTest) {
    String test = suppliedTest.strip().toLower();
    if (test.equals("true") || test.equals("false"))
        return "boolean";
    try {
        int testInt = Integer.parseInt(test);
        return "integer";
    } catch (NumberFormatException e) {}
    try {
        long testLong = Long.parseLong(test);
        return "long";
    catch (NumberFormatException e) {}
    ...
}

答案 1 :(得分:0)

如果String代表某种类型,您可以使用特定于类的解析方法来检查,例如

  • Double.parseDouble()
  • Integer.parseInt()

如果输入字符串不包含表示相应类型的值,则这些方法将抛出NumberFormatException

答案 2 :(得分:0)

你没有足够的不同来了解差异。您所能做的就是找到可以表示该数据的最小类型。 0可以是String,long,int,short,byte,float或double。您需要确定哪个是最合适的响应。