2013-07-03 91 views
0

比方說,我有一個輸入的字符串,我需要格式化這樣的:如何字符串格式化爲一個特定的模式

### ### ############........etc 

所以它必須有前三個字符,然後是一個空格,然後另外三個字符,空間,然後休息。有沒有第三方庫或JDK Class能夠做到這一點?

我試圖用正則表達式

System.out.println(inputString.replaceAll(".{3}", "$0 ")); 

,但它不工作,因爲結果是

### ### ### ### ### etc. 
+1

'的String.format( 「%s%s%S」,S。子串(0,3),s.substring(3,6),s.substring(6));' – DannyMo

回答

2

你可以這樣做:

System.out.println(inputString.replaceFirst("(.{3})(.{0,3})", "$1 $2 ")); 

說明:

就像$0是整個匹配的字符串一樣,所以$1$2分別是括號中的第一個和第二個匹配的東西。

我修改了{3}{0,3}所以串6個字符或更短也工作(它不然而添加尾隨空格當字符串是4和6之間的字符,其可以與.trim()(其可能具有不想要的其他效果)中除去或更復雜的東西)。

希望其他人不需要解釋,因爲它與您的代碼非常相似,但可以隨時詢問您是否確定。 Java regex reference

例子:

System.out.println("123456789".replaceFirst("(.{3})(.{0,3})", "$1 $2 ")); 
System.out.println("12".replaceFirst("(.{3})(.{0,3})", "$1 $2 ")); 
System.out.println("12345".replaceFirst("(.{3})(.{0,3})", "$1 $2 ")); 

打印:

123 456 789
12 
123 45 
+0

這很酷,但是當輸入字符串比6ch短ars,它以格式#####返回它。所以我認爲@moso的評論更好。 – Behnil

+0

@Behnil請參閱編輯,特別是'「我將{3}修改爲{0,3} ...」'。 – Dukeling

0

您可以使用:

String formattedStr = "%s %s %s"; 
     inputStr = String.format(formattedStr ,inputStr.substring(0,3),inputStr.substring(3,6),inputStr.substring(6)); 
相關問題