当前位置:  开发笔记 > 编程语言 > 正文

将char放入每个N个字符的java字符串中

如何解决《将char放入每个N个字符的java字符串中》经验,为你挑选了3个好方法。

我有一个java字符串,它有一个可变长度.

我需要将这个片段"
"
放入字符串中,比方说每10个字符.

例如,这是我的字符串:

`this is my string which I need to modify...I love stackoverlow:)`

我怎样才能获得这个字符串?:

`this is my
string wh
ich I nee
d to modif
y...I love
stackover
flow:)`

谢谢



1> cletus..:

尝试:

String s = // long string
s.replaceAll("(.{10})", "$1
");

编辑:上述作品......大部分时间.我一直在玩它并遇到一个问题:因为它在内部构造了一个默认模式,它在新行上停止.要解决这个问题,你必须以不同的方式写出来.

public static String insert(String text, String insert, int period) {
    Pattern p = Pattern.compile("(.{" + period + "})", Pattern.DOTALL);
    Matcher m = p.matcher(text);
    return m.replaceAll("$1" + insert);
}

精明的读者会发现另一个问题:你必须在替换文本中逃避正则表达式特殊字符(如"$ 1"),否则你将得到不可预知的结果.

我也很好奇并对这个版本进行了基准测试,反对Jon的上述内容.这个速度慢了一个数量级(60k文件上的1000个替换用了4.5秒,用了400ms).在4.5秒中,实际构建模式只有大约0.7秒.大多数是在匹配/替换上,所以它甚至没有进行这种优化.

我通常更喜欢不那么罗嗦的解决方案.毕竟,更多代码=更多潜在的错误.但在这种情况下,我必须承认Jon的版本 - 这真的是天真的实现(我的意思是以一种好的方式) - 明显更好.



2> Jon Skeet..:

就像是:

public static String insertPeriodically(
    String text, String insert, int period)
{
    StringBuilder builder = new StringBuilder(
         text.length() + insert.length() * (text.length()/period)+1);

    int index = 0;
    String prefix = "";
    while (index < text.length())
    {
        // Don't put the insert in the very first iteration.
        // This is easier than appending it *after* each substring
        builder.append(prefix);
        prefix = insert;
        builder.append(text.substring(index, 
            Math.min(index + period, text.length())));
        index += period;
    }
    return builder.toString();
}


这是一个非常困难的问题。正则表达式*可能*是那里的最好方法,但是您需要*非常*首先陈述需求。

3> 小智..:

您可以使用正则表达式".."匹配每两个字符,并将其替换为"$ 0"以添加空格:

s = s.replaceAll("..","$ 0"); 您可能还希望修剪结果以删除末尾的额外空间.

或者,您可以添加负前瞻断言以避免在字符串末尾添加空格:

s = s.replaceAll("..(?!$)","$ 0");

例如:

String s = "23423412342134"; s = s.replaceAll("....", "$0
"); System.out.println(s);

输出: 2342
3412
3421
34

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有