負の数の文字列を解析する方法は?
文字列の形式は次のとおりです。
-123.23
(123.23)
123.23-
上記の文字列のいずれかを数値に変換するクラスはありますか?
そうでない場合、それを行うための最良の方法は何ですか?
負の数の文字列を解析する方法は?
文字列の形式は次のとおりです。
-123.23
(123.23)
123.23-
上記の文字列のいずれかを数値に変換するクラスはありますか?
そうでない場合、それを行うための最良の方法は何ですか?
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;
}
}
置換方法が間違っている場合は申し訳ありませんが、訂正してください。
"-123.23"
Float.valueOf("-123.23");
またはで解析できますDouble.valueOf("-123.23");
"(123.23)"
および"123.23-"
無効であり、自分で改善/解析する必要があります。文字列を段階的に調べて、それが数字であるかどうかを確認できます。数字である場合は、新しい文字列に追加します。最初または最後に-が見つかった場合は、負の値よりも大きくします...
ここにハックがあります、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;
}