2017-10-11 15 views
0

私は次のロングを持っています:201700112345、それを2017.001.12345に変換します。Long/Stringにドットを追加するString.format

long l = 201700112345L; 
String s = Long.toString(l); 
String result = s.substring(0,4)+"."+s.substring(4,7)+"."+s.substring(7); 

しかし、私はまたString.format EDITでこれを達成することができます::シングル入力..with String.format方法の目的は、可変引数パラメータの

は、私はちょうど部分文字列を使用することができます知っていますか?

私が試したいくつかの点:

String.format("%4d.%3d.%5d", l); 
// Which resulted in: 
java.util.MissingFormatArgumentException: Format specifier '%3d' 

私は唯一の代わりに3の1つの入力を持っているので、私は実現はかなり明白..です

私は私が使用して同じ入力に後戻りすることができます知っています%1$は、私は、次に試した:

String.format("%4d.%1$3d.%1$5d", l); 
// Which resulted in: 
201700112345.201700112345.201700112345 

私は、正しい長さではなく、正しい部品を得た、これを、試み

String.format("%.4s.%1$.3s.%1$.5s", Long.toString(l)); 
// Which resulted in: 
2017.201.20170 

私はすべてのことが多いString.formatを使用していない認めなければならないので、私はそれが形式としてサブのいくつかの種類を持っていることも可能ですすぎるよく分かりません。そして、それが可能であるならば、私はそれを把握することはできません。..

+0

"これは、String.format("%s。%s。%s "、s.substring(0、4)、s.substring(4、 7)、s.substring(7)) 'である。 –

+2

[このような質問](https://stackoverflow.com/questions/5114762/how-do-format-a-phone-number-as-a-string-in-java)のようなものがあなたを助けることができますダッシュの代わりに点)。 – Nino

+0

@AndyTurner Hehe、ええ、私はそれのように可能性があることを知っています。 ;)私の質問を編集しました。 –

答えて

1

substringを使用するよりも、これを行うために、より効率的な方法は、StringBuilderを使用することです。これはあなたが不必要部分文字列を作成しないようにすることができますappend(CharSequence,int,int)方法を、持っています:

String formatted = 
    new StringBuilder(s.length() + 2) 
     .append(s, 0, 4) 
     .append('.') 
     .append(s, 4, 7) 
     .append('.') 
     .append(s, 7, s.length()) 
     .toString(); 
関連する問題