java で int
を String
に変換するとき、どのようにゼロで左詰めをしますか?
私は基本的に、9999
までの整数を先頭のゼロでパッドアウトしたいのです (例: 1 = 0001
).
以下のように java.lang.String.format(String,Object...)
を使用します。
String.format("%05d", yournumber);
のようにすると、長さ5のゼロパディングができます。16進数で出力する場合は、"%05x"
のように d
を x
に置き換えてください。
全てのフォーマットオプションは java.util.Formatter
の一部としてドキュメント化されています。
11
を 011
として印刷するとします。
フォーマッターを使用できます: "%03d "
。
。。
このフォーマッターは次のように使用できます。
int a = 11;
String with3digits = String.format("%03d", a);
System.out.println(with3digits);
または、一部のJavaメソッドはこれらのフォーマッターを直接サポートしています。
System.out.printf("%03d", a);
このような例がありました...テストする
import java.text.DecimalFormat;
class TestingAndQualityAssuranceDepartment
{
public static void main(String [] args)
{
int x=1;
DecimalFormat df = new DecimalFormat("00");
System.out.println(df.format(x));
}
}
これをテストすると
String.format("%05d",number);
どちらも動作しますが、私の目的にはString.Formatの方がより良く、より簡潔であると思います。
あなたの場合にパフォーマンスが重要な場合は、「String.format」関数と比較して、オーバーヘッドを減らして自分で行うことができます。
/**
* @param in The integer value
* @param fill The number of digits to fill
* @return The given value left padded with the given number of digits
*/
public static String lPadZero(int in, int fill){
boolean negative = false;
int value, len = 0;
if(in >= 0){
value = in;
} else {
negative = true;
value = - in;
in = - in;
len ++;
}
if(value == 0){
len = 1;
} else{
for(; value != 0; len ++){
value /= 10;
}
}
StringBuilder sb = new StringBuilder();
if(negative){
sb.append('-');
}
for(int i = fill; i > len; i--){
sb.append('0');
}
sb.append(in);
return sb.toString();
}
パフォーマンス。
public static void main(String[] args) {
Random rdm;
long start;
// Using own function
rdm = new Random(0);
start = System.nanoTime();
for(int i = 10000000; i != 0; i--){
lPadZero(rdm.nextInt(20000) - 10000, 4);
}
System.out.println("Own function: " + ((System.nanoTime() - start) / 1000000) + "ms");
// Using String.format
rdm = new Random(0);
start = System.nanoTime();
for(int i = 10000000; i != 0; i--){
String.format("%04d", rdm.nextInt(20000) - 10000);
}
System.out.println("String.format: " + ((System.nanoTime() - start) / 1000000) + "ms");
}
結果。
独自の機能: 1697ms。
String.format: 38134ms。
Maven:。
<dependency>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
<version>14.0.1</version>
</dependency>
サンプルコード:。
String paddedString1 = Strings.padStart("7", 3, '0'); //"007"
String paddedString2 = Strings.padStart("2020", 3, '0'); //"2020"
注意:。
「グアバ」は非常に便利なライブラリであり、「コレクション」、「キャッシュ」、「機能イディオム」、「通貨」、「文字列」、「プリミティブ」、「範囲」、「IO」に関連する多くの機能も提供します。 、
ハッシング 、
イベントバス `など
参照:GuavaExplained。
これを試してみてください。
<。!-言語:Java -->。
import java.text.DecimalFormat;
DecimalFormat df = new DecimalFormat("0000");
String c = df.format(9); // 0009
String a = df.format(99); // 0099
String b = df.format(999); // 0999
上記のアプローチの多くは優れていますが、フロートだけでなく整数をフォーマットする必要がある場合があります。 これは、特に小数点の左と右の特定の数のゼロを埋める必要がある場合に使用できます。
import java.text.NumberFormat;
public class NumberFormatMain {
public static void main(String[] args) {
int intNumber = 25;
float floatNumber = 25.546f;
NumberFormat format=NumberFormat.getInstance();
format.setMaximumIntegerDigits(6);
format.setMaximumFractionDigits(6);
format.setMinimumFractionDigits(6);
format.setMinimumIntegerDigits(6);
System.out.println("Formatted Integer : "+format.format(intNumber).replace(",",""));
System.out.println("Formatted Float : "+format.format(floatNumber).replace(",",""));
}
}
次のコードでは[NumberFormat][1]を使用して、Formatterを使用する必要があります。
int inputNo = 1;
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumIntegerDigits(4);
nf.setMinimumIntegerDigits(4);
nf.setGroupingUsed(false);
System.out.println("Formatted Integer : " + nf.format(inputNo));
出力:0001。
[1]:https://docs.oracle.com/javase/7/docs/api/java/text/NumberFormat.html?bcsi_scan_64741547a7fe261b = 0& bcsi_scan_filename = NumberFormat.html。
整数と文字列で機能するコードを確認します。
最初の番号が2であると仮定します。 ゼロを追加して、最終的な文字列の長さが4になるようにします。 そのためには、次のコードを使用できます。
int number=2;
int requiredLengthAfterPadding=4;
String resultString=Integer.toString(number);
int inputStringLengh=resultString.length();
int diff=requiredLengthAfterPadding-inputStringLengh;
if(inputStringLengh<requiredLengthAfterPadding)
{
resultString=new String(new char[diff]).replace("\0", "0")+number;
}
System.out.println(resultString);
パッケージは必要ありません:
String paddedString = i < 100 ? i < 10 ? "00" + i : "0" + i : "" + i;
これにより、文字列が3文字になり、4〜5個のパーツを追加するのが簡単になります。 これは決して完璧な解決策ではないことを知っています(特に大きなパッド入りの ⁇ が必要な場合)が、私はそれが好きです。