次のような文字列があり、"2E6 3.34e-5 3 4.6"
replaceAll を使用して次のようなトークンを置き換えたい:
"((\\-)?[0-9]+(\\.([0-9])+)?)(E|e)((\\-)?[0-9]+(\\.([0-9])+)?)"
(つまり、間に e または E がある 2 つの数値) を同等の通常の数値形式に変換します (つまり、"2E6"
と"2000000"
で"3.34e-5"
置き換えます"0.0000334"
) 。
私が書いた:
value.replaceAll("((\\-)?[0-9]+(\\.([0-9])+)?)(E|e)((\\-)?[0-9]+(\\.([0-9])+)?)", "($1)*10^($6)");
しかし、実際には、そのように書くだけでなく、最初の引数に10を2番目の引数の力で乗算したいと思います..何かアイデアはありますか?
アップデート
私はあなたの提案に基づいて次のことをしました:
Pattern p = Pattern.compile("((\\-)?[0-9]+(\\.([0-9])+)?)(E|e)((\\-)?[0-9]+(\\.([0-9])+)?)");
Matcher m = p.matcher("2E6 3.34e-5 3 4.6");
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, "WHAT HERE??"); // What HERE ??
}
m.appendTail(sb);
System.out.println(sb.toString());
アップデート
最後に、これは私が到達したものです:
// 32 #'s because this is the highest precision I need in my application
private static NumberFormat formatter = new DecimalFormat("#.################################");
private static String fix(String values) {
String[] values_array = values.split(" ");
StringBuilder result = new StringBuilder();
for(String value:values_array){
try{
result.append(formatter.format(new Double(value))).append(" ");
}catch(NumberFormatException e){ //If not a valid double, copy it as is
result.append(value).append(" ");
}
}
return result.toString().substring(0, result.toString().length()-1);
}