Java 替换除第一个字符串外的多个字符串
我有一个字符串,其中我希望删除除第一个以外的所有出现的Java 替换除第一个字符串外的多个字符串,java,regex,Java,Regex,我有一个字符串,其中我希望删除除第一个以外的所有出现的§a,而§b和§c也是如此。例如: §ah§ae§al§bo§bw§bo§br§bl§bd应成为§ahell§bo world 在我的情况下,这些字符串之间总是有一个或两个字符,从而产生以下正则表达式: ((?使用String.indexOf(§a)然后只使用String.replace(§a),“”)处理该字符后面的所有内容将非常简单 可能会占用更多的内存,但我想你并不真的需要一个内存高效的解决方案 在任何情况下,这都会起作用,所以如果其他
§a
,而§b
和§c
也是如此。例如:
§ah§ae§al§bo§bw§bo§br§bl§bd
应成为§ahell§bo world
在我的情况下,这些字符串之间总是有一个或两个字符,从而产生以下正则表达式:
((?使用String.indexOf(§a)然后只使用String.replace(§a),“”)处理该字符后面的所有内容将非常简单
可能会占用更多的内存,但我想你并不真的需要一个内存高效的解决方案
在任何情况下,这都会起作用,所以如果其他方法都不起作用,那么就这样做(即使使用3个字符串进行操作会使它更混乱)
要获得没有第一次出现的字符串,只需使用String.substring()和indexOf()如果它不必是纯regexreplaceAll(regex,replacement)
解决方案,您可以使用appendReplacement
循环和跟踪每个匹配子字符串的第一个实例的集
Java 1.4+解决方案:
String input = "§ah§ae§al§al§bo §bw§bo§br§cl§cd";
Set<String> first = new HashSet<>();
StringBuffer buf = new StringBuffer();
Matcher m = Pattern.compile("§[abc]").matcher(input);
while (m.find())
if (! first.add(m.group()))
m.appendReplacement(buf, "");
String result = m.appendTail(buf).toString();
System.out.println(result);
Set<String> first = new HashSet<>();
String result = Pattern.compile("§[abc]").matcher(input)
.replaceAll(mr -> first.add(mr.group()) ? "$0" : "");
好的,我想使用正则表达式而不是Java函数/循环。好吧,这里不是专家,但如果没有其他方法可行,你可能会退回到这一步。如果你能承受字符串开头和替换匹配之间的长度限制,你可以使用受限宽度查找,text.replaceAll(“(?lookbehind有一个固定的长度。不是在Java中,请参见