5

私はString多くの異なるformats. runtime値の実際の型を認識し、値をその型に変換できる必要があります。

例えば。私が持っている場合、String Fri Feb 08 07:30:00 GMT 2013this は実際には aDateであり、 a は aStringに変換され、date objectそのように返されます。

この問題に対する私の現在の解決策は、データ型への変換を「試行」することです。変換が成功した場合はすべて問題なく、変換が失敗した場合は次の変換の試行に進みます。これは機能しますが、見苦しく、保守が不可能であり、より良い解決策が既に存在していると確信しています。

ありがとう。

4

4 に答える 4

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;
}
于 2013-02-08T10:49:41.643 に答える
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);
    }
}
于 2013-02-08T10:39:32.387 に答える
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/

于 2013-02-08T10:31:51.873 に答える
0

渡された文字列が制御できない場合は、アプローチは問題ありません。もう 1 つの提案: 可能なすべての変換を適用し、あいまいな文字列をチェックする必要があります。複数の変換が成功した場合、文字列があいまいであり、おそらく例外をスローして、エラー処理を行う必要があります。

于 2013-02-08T10:53:43.013 に答える