0

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

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

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

我试图使用正则表达式

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

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

### ### ### ### ### etc.
4

2 回答 2

2

你可以这样做:

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

解释:

就像$0整个匹配的字符串一样$1$2括号中的第一个和第二个匹配的东西分别是和。

我将其修改为 6 个字符或更短的{3}字符串{0,3}也可以工作(但是,当字符串介于 4 到 6 个字符之间时,它确实会添加一个尾随空格,可以使用.trim()(这可能会产生不需要的其他效果)或更复杂的东西来删除)。

希望其余部分不需要解释,因为它与您的代码非常相似,但如果您不确定,请随时询问。 Java 正则表达式参考

例子:

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

印刷:

123 456 78901234567890
12
123 45 
于 2013-07-03T16:11:13.433 回答
0

您可以使用 :

String formattedStr = "%s %s %s";
        inputStr = String.format(formattedStr ,inputStr.substring(0,3),inputStr.substring(3,6),inputStr.substring(6) );
于 2013-07-03T20:42:54.427 回答