0

すべての値がさまざまな単位を持つ数値であるデータベースから受け取ったデータを処理する必要があります

例えば

12.553 mg
23floz
5 oz
23kg
45 kg

これらのデータを処理するには、すべてをカスタム オブジェクトとして変換する必要がありますQuantity(double amount, String unit)

問題

データベースに何種類の単位があるのか​​ わかりません。単位からデータの数値部分を切り取り、これらを2つの一時文字列に別々に保持する方法が必要なので、その後データを処理して、数量オブジェクトが正しく

値には、数値と単位を区切る空白が含まれているとは限らないため、次のようなソリューション

String[] tmp = line.split("\\s");
Quantity(Double.parse(tmp[0], tmp[1]);

残念ながら機能しません

4

2 に答える 2

2

これを行うには、おそらく正規表現マッチングを使用します。

    String example = "12.564mg";

    Pattern p = Pattern.compile("([0-9.]+)\\s*([a-zA-Z]+)");
    Matcher matcher = p.matcher(example);

    if (matcher.matches()) {
        new Quantity(Double.valueOf(matcher.group(1)), matcher.group(2));
    }
    else {
        throw new IllegalArgumentException("Couldn't parse: " + example);
    }

を保存してPattern、解析する入力の各項目に再利用できます。また、これは分割よりも少し安全です。これmatcher.matches()により、解析が成功したことを確認でき、予期しないArrayIndexOutOfBoundsException.

于 2013-09-11T22:23:42.897 に答える