数千の整数をカンマで文字列に変換する


182

整数35634646を1000に変換したいので、35,634,646にする必要があります。

それを行う最も速い方法は何でしょうか?

回答:


292
System.out.println(NumberFormat.getNumberInstance(Locale.US).format(35634646));
Output: 35,634,646

5
追加しなければならなかったimport java.text.NumberFormat;
マイクS

6
これにより、常にを使用するUSスタイルのグループ化が強制されますが、代わりにグループ化に,使用.する地域もあります。つまり、ロケールをハードコーディングすることは悪い習慣だと考えられています。
Hai Zhang

4
@DreaminginCodeそれをうまく実行することLocale.getCurrent()が解決策です
Roger RV

@RogerRV Locale.getCurrent()はありません(少なくともandroidでは)
E.Akio

いや、これはアメリカに住んでいない人の96%にとって最良の答えではありません
イチジク

152

あなたは最速を求めますが、おそらく「最高」または「正しい」または「典型的」を意味しますか?

また、数千を示すためにカンマを要求しますが、おそらく「ユーザーのローカルの習慣に応じた通常の人間が読める形式で」という意味ですか?

あなたはそれを次のように行います:

    int i = 35634646;
    String s = NumberFormat.getIntegerInstance().format(i);

アメリカ人は「35,634,646」を取得します

ドイツ人は「35.634.646」を取得します

スイスのドイツ人は「35'634'646」を取得します


各ロケールの番号パターンはどこで入手できますか?コードを読もうとしたがどこにも見つからなかった
nhoxbypass 2018年


41

整数:

int value = 100000; 
String.format("%,d", value); // outputs 100,000

ダブルス:

double value = 21403.3144d;
String.format("%,.2f", value); // outputs 21,403.31

String.formatはかなり強力です。

-psuzziフィードバックごとに編集。


1
利点:「新規」ではなく、(DecimalFormatとは異なり)ガベージコレクターをロードしません。
Contango

をご覧くださいString.formatreturn new Formatter(l) ...etc で始まります。そのため、ガベージコレクターの主張は、それほど強くありません。
Scheintod 2017

2
これは私のお気に入りの答えです。質問はIntegerでの作業を求めているので、コードは次のとおりです。int value = 100000; String.format( "%、d"、value);
psuzzi

20
 int value = 35634646;
 DecimalFormat myFormatter = new DecimalFormat("#,###");
 String output = myFormatter.format(value);
 System.out.println(output);

出力: 35,634,646


1
パターンはこれ以上である必要はありません。#,###ヨーロッパスタイルのフォーマットが必要な場合は、を使用できます#,##,###
アリ

7
@アリ:あなたが説明する形式はインドでのみ使用されており、少なくとも90%はインドがヨーロッパにないことを確信しています。
Cairnarvon、2013年

私はそれを取得します...インドのフォーマットが必要な場合は、それであなたはそれを行う方法です。
Ali

1
これはロケールに依存しており、デフォルトのロケールが,
antak

17

他の答えは正しいですが、使用する前にロケールを再確認してください"%,d"

Locale.setDefault(Locale.US);
int bigNumber = 35634646;
String formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);

Locale.setDefault(new Locale("pl", "PL"));
formattedNumber = String.format("%,d", bigNumber);
System.out.println(formattedNumber);

結果:

35,634,646
35 634 646

3

この解決策は私にとってうまくいきました:

NumberFormat.getNumberInstance(Locale.US).format(Integer.valueOf("String Your Number"));


1

同じことをJSPで行う必要がある場合は、以下を使用します。

<fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
<c:out value="${formattedVariable}"></c:out>

もちろん、複数の値を使用する場合:

<c:forEach items="${yourlist}" var="yourlist">

    <fmt:formatNumber pattern="#,##0" value="${yourlist.yourintvalue}" var="formattedVariable" />
    <c:out value="${formattedVariable}"></c:out>
</c:forEach>

1

「numberformat」にも「String.format」にもアクセスできない(フレームワーク内のJavaの限定バージョンを使用する)ためのソリューションを次に示します。お役に立てれば幸いです。

number= 123456789;
thousandsSeparator=",";
myNumberString=number.toString();   
numberLength=myNumberString.length;
howManySeparators=Math.floor((numberLength-1)/3)
formattedString=myNumberString.substring(0,numberLength-(howManySeparators*3))
while (howManySeparators>0)    {
formattedString=formattedString+thousandsSeparator+myNumberString.substring(numberLength-(howManySeparators*3),numberLength-((howManySeparators-1)*3));
howManySeparators=howManySeparators-1;    }

formattedString

コードにコメントを追加して回答を編集することを検討してください(そして、おそらくそれをメソッドにラップするので、より便利になります)
noiaverbale

0

拡張機能を使用

import java.text.NumberFormat

val Int.commaString: String
  get() = NumberFormat.getInstance().format(this)

val String.commaString: String
  get() = NumberFormat.getNumberInstance().format(this.toDouble())

val Long.commaString: String
  get() = NumberFormat.getInstance().format(this)

val Double.commaString: String
  get() = NumberFormat.getInstance().format(this)

結果

1234.commaString => 1,234
"1234.456".commaString => 1,234.456
1234567890123456789.commaString => 1,234,567,890,123,456,789
1234.456.commaString => 1,234.456

-1

あなたは使用できません

System.out.printf("%n%,d",int name);

のコンマはprintf%dインターにコンマを追加する必要があります。

それについて肯定的ではありませんが、私にとってはうまくいきます。


それは私のためにコンパイルされていません
Mishax

「それについて前向きではない。」無意味。
ロブシェパード

-8

最初にJSTLタグを含める必要があります:-

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 

ページの最初

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.