3

負の数の文字列を解析する方法は?

文字列の形式は次のとおりです。

-123.23  
(123.23)  
123.23-

上記の文字列のいずれかを数値に変換するクラスはありますか?

そうでない場合、それを行うための最良の方法は何ですか?

4

3 に答える 3

5

WarrenFaithsの回答に基づいて、これを追加できます。

Double newNumber = 0;
if(number.charAt(i).isDigit()){
     //parse numeber here using WarrenFaiths method and place the int or float or double 
     newNumber = Double.valueOf(number);
}else{
    Boolean negative = false;

    if(number.startsWith("-") || number.endsWith("-")){
         number = number.replace("-", "");
         negative = true;
    }
    if(number.startsWith("(") || number.endsWith(")"){
        number = number.replace("(", "");
        number = number.replace(")", "");
    }

    //parse numeber here using WarrenFaiths method and place the float or double 
    newNumber = Double.valueOf(number);

    if(negative){
      newNumber = newNumber * -1;
    }
}

置換方法が間違っている場合は申し訳ありませんが、訂正してください。

于 2012-05-04T12:31:09.643 に答える
4

"-123.23"Float.valueOf("-123.23");またはで解析できますDouble.valueOf("-123.23");

"(123.23)"および"123.23-"無効であり、自分で改善/解析する必要があります。文字列を段階的に調べて、それが数字であるかどうかを確認できます。数字である場合は、新しい文字列に追加します。最初または最後に-が見つかった場合は、負の値よりも大きくします...

于 2012-05-04T12:23:55.357 に答える
0

ここにハックがあります、plsは改善などについてコメントします、もう少し自分自身を学ぶ時間です:)

private Double RegNumber(String sIn) {
        Double result = 0E0;
        Pattern p = Pattern.compile("^\\-?([0-9]{0,3}(\\,?[0-9]{3})*(\\.?[0-9]*))");   // -1,123.11
        Matcher m = p.matcher(sIn);
        if (m.matches()) {
            result = Double.valueOf(sIn);
        } else {
            Pattern p1 = Pattern.compile("^\\(?([0-9]{0,3}(\\,?[0-9]{3})*(\\.?[0-9]*))\\)?$");  // (1,123.22)
            Matcher m1 = p1.matcher(sIn);
            if (m1.matches()) {
                String x[] = sIn.split("(\\({1})|(\\){1})"); // extract number
                result = Double.valueOf("-" + x[1]);
            } else {
                Pattern p2 = Pattern.compile("([0-9]{0,3}(\\,?[0-9]{3})*(\\.?[0-9]*))\\-$");  // 1,123.22-
                Matcher m2 = p2.matcher(sIn);
                if (m2.matches()) {
                    String x[] = sIn.split("(\\-{1})"); // extract number
                    result = Double.valueOf("-" + x[0]);
                } else {
                    result = 99999999E99;  // error, big value
                }
            }
        }
        return result;
    }
于 2012-05-19T03:05:30.903 に答える