Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在字符串中间添加字符_Java_Regex - Fatal编程技术网

Java 在字符串中间添加字符

Java 在字符串中间添加字符,java,regex,Java,Regex,我需要您的帮助将类似12345678的字符串转换为1234.56.78 [FOUR DIGITS].[TWO DIGITS].[TWO DIGITS] 我的代码: String s1 = "12345678"; s1 = s1.replaceAll("(\\d{4})(\\d+)", "$1.$2").replaceAll("(\\d{2})(\\d+)", "$1.$2"); System.out.println(s1); 但结果是12.34.56.78如果您确定输入的格式始终相同,则只需

我需要您的帮助将类似
12345678
的字符串转换为
1234.56.78

[FOUR DIGITS].[TWO DIGITS].[TWO DIGITS]
我的代码:

String s1 = "12345678";
s1 = s1.replaceAll("(\\d{4})(\\d+)", "$1.$2").replaceAll("(\\d{2})(\\d+)", "$1.$2");
System.out.println(s1);

但结果是
12.34.56.78

如果您确定输入的格式始终相同,则只需使用
StringBuilder
并执行以下操作:

String input = "12345678";
String output = new StringBuilder().append(input.substring(0, 4))
        .append(".").append(input.substring(4, 6)).append(".")
        .append(input.substring(6)).toString();
System.out.println(output);
此代码通过将点附加到指定位置的子字符串来创建新字符串

输出:

1234.56.78
对更新的正则表达式使用单个方法,否则第二个调用将替换前四位

System.out.println(s1.replaceAll("(\\d{4})(\\d{2})(\\d+)", "$1.$2.$3")

这会在每对字符后面加上点,第一对字符除外:

str = str.replaceAll("(^....)|(..)", "$1$2.");
这适用于任何长度的字符串,包括奇数长度

比如说

"1234567890123" --> "1234.56.78.90.12.3"

输入总是8位数字。使用正则表达式是否更昂贵?我尝试了正则表达式,因为我认为它比串联更有效。对不起,我是新来的,我正试图用最好的方式来做。在这里使用正则表达式肯定比使用简单的子字符串更昂贵。你真的不需要使用StringBuilder,很肯定javac会自动决定使用它。@SameerPuri很抱歉,我不完全理解你的评论。如果您是说我们可以简单地使用
+
进行串联,然后编译器会对其进行优化,那么这是真的。但是如果你自己处理事情,而不是把它留在编译器上,那就更好了。嗯,这是我的观点,可能与其他人的想法不同。是的,这就是我的意思——只是为了简单起见,因为它无论如何都会由javac完成。不过,你有一个观点,那就是这种行为将来可能会改变,从而产生意想不到的结果。