Java正则实现:将两个+之间的字符替换为等数量的-
原代码问题分析
你使用的正则-\\+-只能匹配固定的-+-字符序列,且匹配过程会消耗已命中的字符,无法覆盖首尾+之间的所有内容,因此无法得到预期结果。
正确实现方案
方案1:非正则实现(性能更高,逻辑直观)
直接根据首尾+的位置计算中间需要替换的长度,拼接结果即可,适配所有Java版本:
String s = "+-+-+-+"; // 先校验字符串符合首尾为+、长度至少为2的前提 if (s.startsWith("+") && s.endsWith("+") && s.length() >= 2) { int midLen = s.length() - 2; StringBuilder res = new StringBuilder(s.length()); res.append('+'); for (int i = 0; i < midLen; i++) { res.append('-'); } res.append('+'); s = res.toString(); } System.out.println(s); // 输出 +-----+
方案2:正则实现(Java 11+支持)
利用正则断言匹配首尾+之间的所有内容,配合String.repeat生成等长的-:
String s = "+-+-+-+"; s = s.replaceAll("(?<=^\\+).*(?=\\+$)", matchResult -> "-".repeat(matchResult.group().length())); System.out.println(s); // 输出 +-----+
内容的提问来源于stack exchange,提问作者Anil Lama
相关产品推荐
相关产品推荐

