我有一个java字符串,它有一个可变长度.
我需要将这个片段"<br>"放入字符串中,比方说每10个字符.
例如,这是我的字符串:
`this is my string which I need to modify...I love stackoverlow:)`
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得这个字符串?:
`this is my<br> string wh<br>ich I nee<br>d to modif<br>y...I love<br> stackover<br>flow:)`
Run Code Online (Sandbox Code Playgroud)
谢谢
cle*_*tus 46
尝试:
String s = // long string
s.replaceAll("(.{10})", "$1<br>");
Run Code Online (Sandbox Code Playgroud)
编辑:上述作品......大部分时间.我一直在玩它并遇到一个问题:因为它在内部构造了一个默认模式,它在新行上停止.要解决这个问题,你必须以不同的方式写出来.
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);
}
Run Code Online (Sandbox Code Playgroud)
精明的读者会发现另一个问题:你必须在替换文本中逃避正则表达式特殊字符(如"$ 1"),否则你将得到不可预知的结果.
我也很好奇并对这个版本进行了基准测试,反对Jon的上述内容.这个速度慢了一个数量级(60k文件上的1000个替换用了4.5秒,用了400ms).在4.5秒中,实际构建模式只有大约0.7秒.大多数是在匹配/替换上,所以它甚至没有进行这种优化.
我通常更喜欢不那么罗嗦的解决方案.毕竟,更多代码=更多潜在的错误.但在这种情况下,我必须承认Jon的版本 - 这真的是天真的实现(我的意思是以一种好的方式) - 明显更好.
Jon*_*eet 30
就像是:
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();
}
Run Code Online (Sandbox Code Playgroud)
您可以使用正则表达式".."匹配每两个字符,并将其替换为"$ 0"以添加空格:
s = s.replaceAll("..","$ 0"); 您可能还希望修剪结果以删除末尾的额外空间.
或者,您可以添加负前瞻断言以避免在字符串末尾添加空格:
s = s.replaceAll("..(?!$)","$ 0");
例如:
String s = "23423412342134";
s = s.replaceAll("....", "$0<br>");
System.out.println(s);
输出: 2342<br>3412<br>3421<br>34
我从String Manipulation来到这里,每 4 个字符插入一个字符,并正在寻找使用 Kotlin 在 Android 上的解决方案。
只需使用 Kotlin 添加一种方法即可(您必须喜欢它的简单性)
val original = "123498761234"
val dashed = original.chunked(4).joinToString("-") // 1234-9876-1234
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44033 次 |
| 最近记录: |