Java 替换字符串中的初始字符并保留长度
Java replace initial characters in String and preserve length
我正在寻找解决方案 (Java) 以用相同数量的其他字符替换最初出现的多个字符,例如,如果 'a' 应替换为“-”,超出我的预期:
aaabbaa -> ---bbaa
aaxxaab -> --xxaab
xaaaaax -> xaaaaax
我尝试过类似的方法:
"aaabbaa".replaceAll( "^[a]+", "-") // -bbaa
"aaabbaa".replaceAll( "(?=^[a]+)", "-") // -aaabbaa
如果可能的话,我更喜欢regex或者oneliner。
你有什么提示吗?
此致,
安妮
使用 char[]
:
char[] cs = str.toCharArray();
for (int i = 0; i < cs.length && cs[i] == 'a'; ++i) {
cs[i] = '-';
}
String newStr = new String(cs);
如果使用 Java 9+,请对 replaceAll
使用 lambda 重载:
import java.util.regex.Pattern;
class Main {
public static void main(String[] args) {
String res = Pattern
.compile("^a+")
.matcher("aaabbb")
.replaceAll(m -> "-".repeat(m.group().length()));
System.out.println(res); // => ---bbb
}
}
Java 支持 lookbehind 中的有限重复。您可以匹配 a 断言字符串开头左边的内容只有 a。
在替换中使用-
(?<=^a{1,100})a
例如
System.out.println("aaabbaa".replaceAll("(?<=^a{0,100})a", "-"));
输出
---bbaa
我正在寻找解决方案 (Java) 以用相同数量的其他字符替换最初出现的多个字符,例如,如果 'a' 应替换为“-”,超出我的预期:
aaabbaa -> ---bbaa
aaxxaab -> --xxaab
xaaaaax -> xaaaaax
我尝试过类似的方法:
"aaabbaa".replaceAll( "^[a]+", "-") // -bbaa
"aaabbaa".replaceAll( "(?=^[a]+)", "-") // -aaabbaa
如果可能的话,我更喜欢regex或者oneliner。
你有什么提示吗?
此致, 安妮
使用 char[]
:
char[] cs = str.toCharArray();
for (int i = 0; i < cs.length && cs[i] == 'a'; ++i) {
cs[i] = '-';
}
String newStr = new String(cs);
如果使用 Java 9+,请对 replaceAll
使用 lambda 重载:
import java.util.regex.Pattern;
class Main {
public static void main(String[] args) {
String res = Pattern
.compile("^a+")
.matcher("aaabbb")
.replaceAll(m -> "-".repeat(m.group().length()));
System.out.println(res); // => ---bbb
}
}
Java 支持 lookbehind 中的有限重复。您可以匹配 a 断言字符串开头左边的内容只有 a。
在替换中使用-
(?<=^a{1,100})a
例如
System.out.println("aaabbaa".replaceAll("(?<=^a{0,100})a", "-"));
输出
---bbaa