将String转换为适当的DataType

时间:2013-02-08 10:20:35

标签: java string date

我有一个String可能有许多不同的formats。我需要能够在runtime识别值的实际类型,然后将值转换为该类型。

例如。如果我有String Fri Feb 08 07:30:00 GMT 2013,那么这实际上是Date,而String应该转换为date object,然后按原样返回。

我目前解决此问题的方法是“尝试”将其转换为数据类型,如果转换成功则一切正常,如果转换失败,则转到下一次转换尝试。这是有效的,但是很丑陋且难以维护,我确信那里已经存在更好的解决方案。

感谢。

4 个答案:

答案 0 :(得分:4)

您可以为每种数据类型使用单独的正则表达式,如下所示:

private final static Pattern DATE_PATTERN = 
    Pattern.compile (
        "(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat) " + 
        "(?:Jan|Feb|Mar|Apr|May|June?|July?|Aug|Sept?|Oct|Nov|Dec) " + 
        "\\d\\d \\d\\d:\\d\\d:\\d\\d \\S+ \\d\\d\\d\\d");

private final static Pattern DOUBLE_PATTERN = 
    Pattern.compile (
        "[\\+\\-]?\\d+\\.\\d+(?:[eE][\\+\\-]?\\d+)?");

private final static Pattern INTEGER_PATTERN = 
    Pattern.compile (
        "[\\+\\-]?\\d+");

public static Object stringToObject (String string)
{
    if (DATE_PATTERN.matcher (string).matches ())
        return stringToDate (string);
    else if (DOUBLE_PATTERN.matcher (string).matches ())
        return Double.valueOf (string);
    else if (INTEGER_PATTERN.matcher (string).matches ())
        return Integer.valueOf (string);
    else return string;
}

答案 1 :(得分:1)

public static void main(String[] args) {

    String s = "Fri Feb 08 07:30:00 GMT 2013";
    SimpleDateFormat FT = new SimpleDateFormat("EEE MMM dd hh:mm:ss z yyyy");
    Date d;
    try {
        d = FT.parse(s);
        System.out.println(d);
    } catch (ParseException ex) {
        Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
    }
}

答案 2 :(得分:0)

尝试正则表达式: 您可以为每种数据类型编写一个模式,然后将该模式与每个匹配每个匹配转换的实际字符串相匹配。 这是一个简单的例子(在伪Java中):

String name = "Mike"; // This is an English name
String nameRegEx ="[A-Z][a-z]+"; //this patterns matches an english name
Matcher nameMatcher = new Matcher(regEx);
if (match.matches(name)){// I use the matches() method to verify the format of the string
    Name nameObject = Converter.getNameObjectFromString(name);//I make the conversion
}

查看java文档以获取有关匹配器和正则表达式的更多详细信息: http://docs.oracle.com/javase/tutorial/essential/regex/

答案 3 :(得分:0)

如果传递给你的字符串超出你的控制范围,你的方法就可以了。还有一个建议:您应该应用每个可能的转换并检查不明确的字符串。如果多次转换成功,那么字符串是不明确的,你应该做一些错误处理,可能会抛出异常。