48

数値を含む可能性のある(DBからの)文字列があります。数値が含まれている場合は、次のような末尾のゼロを削除したいと思います。

  • 10.0000
  • 10.234000

str.replaceAll("\\.0*$", "")、最初のものでは機能しますが、2番目のものでは機能しません。

答えの多くは使用することを示していますBigDecimalが、String私が得るのは数値ではないかもしれません。したがって、より良い解決策はおそらく正規表現を使用することだと思います。

4

11 に答える 11

97

可能性があります:

1000    -> 1000
10.000  -> 10 (without point in result)
10.0100 -> 10.01 
10.1234 -> 10.1234

私は怠惰で愚かです、ただ

s = s.indexOf(".") < 0 ? s : s.replaceAll("0*$", "").replaceAll("\\.$", "");

理解を容易にするために、いくつかのコメントに記載されているcontains代わりに使用する同じソリューションindexOf

 s = s.contains(".") ? s.replaceAll("0*$","").replaceAll("\\.$","") : s
于 2013-02-20T16:42:50.830 に答える
26

最もクリーンな方法であるDecimalFormatを使用する

String s = "10.1200";
DecimalFormat decimalFormat = new DecimalFormat("0.#####");
String result = decimalFormat.format(Double.valueOf(s));
System.out.println(result);
于 2013-02-20T19:50:29.617 に答える
11
String value = "10.010"
String s = new DecimalFormat("0.####").format(Double.parseDouble(value));
System.out.println(s);

Output:

   10.01
于 2015-04-13T10:49:27.850 に答える
7

他のすべてのソリューションは複雑すぎると思います。単に

s.replaceFirst("\\.0*$|(\\.\\d*?)0+$", "$1");

仕事をします。最初の選択肢が最初に試行されるため、ドットの後にすべてゼロが続くものは何も置き換えられません (グループが設定されないため)。それ以外の場合、ドットの後にいくつかの数字が続き (lazy quantifier により可能な限り少ない数*?)、その後にいくつかのゼロが続く場合、ゼロはグループに含まれていないため破棄されます。それは動作します。

警告

私のコードは、一致しないグループを追加しても何も起こらないという私の仮定に依存しています。これは Oracle 実装には当てはまりますが、文字列「null」を追加するように見えるAndroidなどの他の実装には当てはまりません。意味がないかもしれないので、そのような実装は壊れていると呼びますが、 Javadoc によると正しいです。

于 2014-06-13T20:04:48.230 に答える
2

以下は、次のすべての例で機能します。

"1" -> "1"
"1.0" -> "1"
"1.01500" -> "1.015"
"1.103" -> "1.103"

s = s.replaceAll("()\\.0+$|(\\..+?)0+$", "$2");
于 2016-03-08T14:07:35.753 に答える
0

交換してはどうですか

(\d*\.\d*)0*$

\1

?

于 2013-02-20T16:20:19.287 に答える
0

次のように置き換えることができます。

String result = (str.indexOf(".")>=0?str.replaceAll("\\.?0+$",""):str);

正規表現をできるだけシンプルに保つため。1000(そして、コメントで指摘されているような入力を考慮してください)

于 2013-02-20T16:23:20.537 に答える
-1

最初に分数部分を分離します。次に、以下のロジックを使用できます。

BigDecimal value = BigDecimal.valueOf(345000);
BigDecimal div = new BigDecimal(10).pow(Integer.numberOfTrailingZeros(value.intValue()));
System.out.println(value.divide(div).intValue());
于 2014-08-19T21:59:14.420 に答える