2013-07-03 2 views
0

Допустим, у меня есть входная строка, и мне нужно отформатировать его как это:Как форматировать строку в определенный шаблон

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

поэтому он должен иметь три первые символы, затем пробел, затем еще три символы, пробелы, а затем остальные. Есть ли сторонняя библиотека или класс JDK, способный это сделать?

Я пытался использовать регулярные выражения

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

, но это не работает, потому что результат

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

'String.Format ("% 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

Это классно, но когда входная строка короче 6 ch ars, он возвращает его в формате #####. Так что комментарий от @damo лучше, я думаю. – Behnil

+0

@Behnil См. Edit, в частности '' Я изменил {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)); 
Смежные вопросы