Javaでint
aに変換するときに、どうやってan にゼロString
を埋め込むのですか?
私は基本的に整数まで9999
先行ゼロを埋め込もうとしています(例えば1 = 0001
)。
new String(Integer.toString(num + 10000)).substring(1)
場合、アプローチに問題がありnum
ます(ijs)。
Javaでint
aに変換するときに、どうやってan にゼロString
を埋め込むのですか?
私は基本的に整数まで9999
先行ゼロを埋め込もうとしています(例えば1 = 0001
)。
new String(Integer.toString(num + 10000)).substring(1)
場合、アプローチに問題がありnum
ます(ijs)。
回答:
java.lang.String.format(String,Object...)
このように使用してください:
String.format("%05d", yournumber);
長さが5のゼロ埋め込みの場合。16進出力の場合は、d
をx
as inに置き換え"%05x"
ます。
完全な書式設定オプションは、の一部として文書化されていますjava.util.Formatter
。
String.format
はCのprintf()に似ていると思いますか?
%012d
%d can't format java.lang.String arguments
11
として印刷したいとしましょう011
あなたは、フォーマッタを使用することができます:"%03d"
。
このフォーマッタは次のように使用できます。
int a = 11;
String with3digits = String.format("%03d", a);
System.out.println(with3digits);
あるいは、一部のJavaメソッドはこれらのフォーマッターを直接サポートします。
System.out.printf("%03d", a);
F
です。format()はf
:で なければなりませんString.format(...);
。
int prefixLength = requiredTotalLength - String.valueOf(numericValue).length
、繰り返し文字列メソッドを使用して必要なプレフィックスを作成します。私の知る限りで、繰り返し文字列には、さまざまな方法がありますが、ネイティブJava 1はありません。stackoverflow.com/questions/1235179/...
何らかの理由で1.5より前のJavaを使用している場合は、Apache Commons Langメソッドを試すことができます
org.apache.commons.lang.StringUtils.leftPad(String str, int size, '0')
この例が見つかりました...テストします...
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
for( int i : data ) strData += (i > 9 ? (i > 99 ? "" : "0") : "00") + Integer.toString( i ) + "|";
それは非常に迅速に機能しました(残念ながら時間を計らなかった!)
Google Guavaを使用できます。
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"
注意:
Guava
それはまたに関連した機能の多くを提供し、非常に便利なライブラリですCollections
、Caches
、Functional idioms
、Concurrency
、Strings
、Primitives
、Ranges
、IO
、Hashing
、EventBus
、など
参照: GuavaExplained
上記のアプローチの多くは優れていますが、浮動小数点数だけでなく整数もフォーマットする必要がある場合があります。これは、特に10進数の右側と同様に左側に特定の数のゼロを埋め込む必要がある場合に使用できます。
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(",",""));
}
}
整数と文字列で機能するコードを確認してください。
最初の数が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);
(new char[diff])
理由
replace("\0", "0")
何が...何ですか
フォーマッタを使用する必要があります。次のコードはNumberFormatを使用しています
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
public static String zeroPad(long number, int width) {
long wrapAt = (long)Math.pow(10, width);
return String.valueOf(number % wrapAt + wrapAt).substring(1);
}
このアプローチの唯一の問題は、それがあなたがそれがどのように機能するかを理解するためにあなたの思考の帽子をかぶらせることです。
number
たりしてwidth
18より大きい
パッケージは必要ありません:
String paddedString = i < 100 ? i < 10 ? "00" + i : "0" + i : "" + i;
これにより、文字列が3文字になるようにパディングされ、4〜5文字のパートを簡単に追加できます。これは決して完璧な解決策ではないことを知っていますが(特に、大きな埋め込み文字列が必要な場合)、私はそれが好きです。