如何将字符串格式化为特定模式

时间:2013-07-03 16:07:41

标签: java string string-matching

假设我有一个输入字符串,我需要像这样格式化它:

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

所以它必须有前三个字符,然后是一个空格,然后是另外三个字符,空格,然后是其余字符。是否有第三方库或JDK类能够做到这一点?

我试图使用正则表达式

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

但它不起作用,因为结果是

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

2 个答案:

答案 0 :(得分:2)

你可以这样做:

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

<强>解释

正如$0是完整匹配的字符串一样,$1$2分别是括号中第一个和第二个匹配的内容。

我将{3}修改为{0,3},因此6个字符或更短的字符串也可以工作(但是当字符串介于4到6个字符之间时,它会添加一个尾随空格,可以使用{{ 1}}(可能有不必要的其他影响)或更复杂的东西)。

希望其余部分无需解释,因为它与您的代码非常相似,但您可以随意询问您是否不确定。 Java regex reference

示例:

.trim()

打印:

System.out.println("12345678901234567890".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 "));

答案 1 :(得分:0)

您可以使用:

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