Java 字符串替换
Java String replace
假设我有一个字符串 "aabbccaa"
。现在我想用另一个字符串替换给定字符串中出现的 "aa"
。但是应该是这样的。
第一次出现的 "aa"
应替换为 "1"
,下一次出现的 "aa"
应替换为 "2"
,依此类推。
所以,字符串的结果就变成了"1bbcc2"
.
您可以在计数器递增的 for 循环中使用 replaceFirst()
...
for (int i = 1; string.contains("aa"); i++) {
string = string.replaceFirst("aa", "" + i);
}
您可以使用 Matcher
的 appendReplacement
方法:
Pattern p = Pattern.compile("aa");
Matcher m = p.matcher("aabbccaahhhaahhhaaahahhahaaakty");
StringBuffer sb = new StringBuffer();
// Variable "i" serves as a counter. It gets incremented after each replacement.
int i = 0;
while (m.find()) {
m.appendReplacement(sb, ""+(i++));
}
m.appendTail(sb);
System.out.println(sb.toString());
这种方法可以避免创建多个字符串对象 (demo)。
可以使用 Java 函数,但使用 char 数组并使用较低级别的逻辑会更快。
String s = "aabbccaa";
String target = "aa";
int i = 1;
String newS;
for (int j = 0; j < s.length; j++) {
newS = s.replaceFirst(target, i++);
j += newS.length - s.length;
s = newS;
}
这是一个解决方案:
public static void main(String[] a) {
int i = 1;
String before = "aabbccaabbaabbaa";
String regex = "aa";
String after = substitute(i, before, regex);
System.out.println(after);
}
private static String substitute(int i, String before, String regex) {
String after = before.replaceFirst(regex, Integer.toString(i++));
while (!before.equals(after)) {
before = after;
after = before.replaceFirst(regex, Integer.toString(i++));
}
return after;
}
输出:
1bbcc2bb3bb4
假设我有一个字符串 "aabbccaa"
。现在我想用另一个字符串替换给定字符串中出现的 "aa"
。但是应该是这样的。
第一次出现的 "aa"
应替换为 "1"
,下一次出现的 "aa"
应替换为 "2"
,依此类推。
所以,字符串的结果就变成了"1bbcc2"
.
您可以在计数器递增的 for 循环中使用 replaceFirst()
...
for (int i = 1; string.contains("aa"); i++) {
string = string.replaceFirst("aa", "" + i);
}
您可以使用 Matcher
的 appendReplacement
方法:
Pattern p = Pattern.compile("aa");
Matcher m = p.matcher("aabbccaahhhaahhhaaahahhahaaakty");
StringBuffer sb = new StringBuffer();
// Variable "i" serves as a counter. It gets incremented after each replacement.
int i = 0;
while (m.find()) {
m.appendReplacement(sb, ""+(i++));
}
m.appendTail(sb);
System.out.println(sb.toString());
这种方法可以避免创建多个字符串对象 (demo)。
可以使用 Java 函数,但使用 char 数组并使用较低级别的逻辑会更快。
String s = "aabbccaa";
String target = "aa";
int i = 1;
String newS;
for (int j = 0; j < s.length; j++) {
newS = s.replaceFirst(target, i++);
j += newS.length - s.length;
s = newS;
}
这是一个解决方案:
public static void main(String[] a) {
int i = 1;
String before = "aabbccaabbaabbaa";
String regex = "aa";
String after = substitute(i, before, regex);
System.out.println(after);
}
private static String substitute(int i, String before, String regex) {
String after = before.replaceFirst(regex, Integer.toString(i++));
while (!before.equals(after)) {
before = after;
after = before.replaceFirst(regex, Integer.toString(i++));
}
return after;
}
输出:
1bbcc2bb3bb4