2017-10-11 99 views
0

我有以下長:201700112345,我想將其轉換爲2017.001.12345String.format添加點到長/字符串

我知道我可以只使用一個子:

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

但我也有一個String.format編輯做到這一點:..with單個輸入的String.format方法的對象的可變參數的參數?

有些事情我已經試過:

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

這是相當明顯的我知道,因爲我只有一個輸入,而不是三個..

我知道我可以使用原路返回到相同的輸入%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來實現」:String.format(「%s。%s。%s」,s.substring(0,4),s.substring(4, 7),s.substring(7))'。 –

+2

也許像[這個SO問題](https://stackoverflow.com/questions/5114762/how-do-format-a-phone-number-as-a-string-in-java)可以幫助你(只是使用而不是破折號..) – Nino

+0

@AndyTurner嘿嘿,是的,我知道這是可能的。 ;)編輯我的問題。 –

回答

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();