Java替换字符串中的初始字符并保留长度
我正在寻找解决方案(Java),用相同数量的其他字符替换最初出现的多个字符,例如,如果“a”应替换为“-”,则比我预期的:Java替换字符串中的初始字符并保留长度,java,regex,regexp-replace,Java,Regex,Regexp Replace,我正在寻找解决方案(Java),用相同数量的其他字符替换最初出现的多个字符,例如,如果“a”应替换为“-”,则比我预期的: aaabbaa -> ---bbaa aaxxaab -> --xxaab xaaaaax -> xaaaaax 我试过这样的方法: "aaabbaa".replaceAll( "^[a]+", "-") // -bbaa "aaabbaa".replac
aaabbaa -> ---bbaa
aaxxaab -> --xxaab
xaaaaax -> xaaaaax
我试过这样的方法:
"aaabbaa".replaceAll( "^[a]+", "-") // -bbaa
"aaabbaa".replaceAll( "(?=^[a]+)", "-") // -aaabbaa
如果可能的话,我更喜欢regex或oneliner
你有什么提示吗
问候,,
安妮使用
字符[]
:
char[] cs = str.toCharArray();
for (int i = 0; i < cs.length && cs[i] == 'a'; ++i) {
cs[i] = '-';
}
String newStr = new String(cs);
char[]cs=str.toCharArray();
对于(int i=0;i
如果使用Java 9+,请将lambda重载用于replaceAll
:
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支持lookback中的有限重复。您可以匹配一个断言,从字符串开始的左边的内容仅为a 使用
-
(?<=^a{1,100})a
同意。这种情况会停止for循环。但老实说:解决这个问题的方法太可怕了。完美的解决方案!我想,这也是可以的:“aaabbbaaa”.replaceAll((?@AnnieW)。我已经测试过它,它也可以根据
工作。为了正确性和性能,我们建议您在Java 6到13中只使用具有较低上限的量词。
System.out.println("aaabbaa".replaceAll("(?<=^a{0,100})a", "-"));
---bbaa