从String中检查对象类型

时间:2012-03-12 15:54:06

标签: java xml

我从XML中提取值并尝试将其转换为适当的对象...可以说,value可以是numeric / boolean / String。 举个例子......

<value> 123 </value>
<value> TRUE </value>
<value> some Strings </value>

我正在将XML中的值读取为String。知道什么是将String转换为适当的java对象的最佳方法? (即BigDecimal / Boolean / String) 这就是我正在考虑的解决方案:

    private Object convertParameterValIntoObject(String value){

    Object toreturn = null;
    BigDecimal numeric = null;
    Boolean boo = null;

    try{        
        //deal with numeric val
        numeric = new BigDecimal(value.trim());
        return numeric;         
    }
    catch (NumberFormatException e) {

        try{
            //deal with Boolean
            if(value.trim().equalsIgnoreCase("true") || 
                    value.trim().equalsIgnoreCase("false")){

                boo = new Boolean(value.trim());
                return boo;
            }
            else throw new Exception();
        }
        catch (Exception e1) {

            // String 
            return value.trim();
        }
    }       
}

提前致谢, 哈桑。

3 个答案:

答案 0 :(得分:2)

在不提供更多信息的情况下解决此问题将导致解决方案不良。

我强烈建议为您的XML提供XSD,XSD包含有关您的XML的元数据,包括数据类型。一旦XSD可用,您就有很多选择将XML转换为Java对象(我推荐JAXB

使用JAXB,您可以从XSD生成Java对象,或者自己编写对象并使用JAXB注释来提供一些元数据。

答案 1 :(得分:2)

您可以使用java.util.Scanner,它具有您需要的所有类型检测。这是一个有效的例子。您需要确保从最具体到最不具体的类型进行探测,这里我测试boolean,然后是number,然后是string。

String[] testValues = { "123", "123.4", "FALSE", "false",
        "some strings" };

for (String test : testValues) {
    Scanner scanner = new Scanner(test);
    scanner.useDelimiter("^");
    if (scanner.hasNextBoolean()) {
        boolean value = scanner.nextBoolean();
        System.out.println("boolean " + value);
    } else if (scanner.hasNextDouble()) {
        double value = scanner.nextDouble();
        System.out.println("number " + value);
    } else if (scanner.hasNext(".*")) {
        String value = scanner.next();
        System.out.println("string " + value);
    }
}

输出

number 123.0
number 123.4
boolean false
boolean false
string some strings

答案 2 :(得分:0)

为什么不使用XStream?在你的情况下,它将非常简单:(在XStream 2分钟教程的引用下面)

构建一个纯粹来自XML的对象:

Person newJoe = (Person)xstream.fromXML(xml);

这就是XStream的简单!