我知道如何从String中删除重复的字符并保留第一次出现而没有正则表达式:
String method(String s){
String result = "";
for(char c : s.toCharArray()){
result += result.contains(c+"")
? ""
: c;
}
return result;
}
// Example input: "Type unique chars!"
// Output: "Type uniqchars!"
我知道如何从String中删除重复的字符并使用regex保留最后一次出现:
String method(String s){
return s.replaceAll("(.)(?=.*\\1)", "");
}
// Example input: "Type unique chars!"
// Output: "Typnique chars!"
关于我的问题:使用正则表达式,是否有可能从字符串中删除重复的字符,但保留第一次出现而不是最后一次?
至于为什么我要问:我使用以下函数(基于上面的第一个示例)遇到了this codegolf answer:
String f(char[]s){String t="";for(char c:s)t+=t.contains(c+"")?"":c;return t;}
我想知道使用正则表达式和字符串输入是否可以缩短这一点。但是,即使它更长,我只是好奇,如果可以从带有正则表达式的String中删除重复的字符,同时保留每个字符的第一次出现。
答案 0 :(得分:1)
这不是最短的选项,不仅涉及正则表达式,还是一个选项。您可以在运行正则表达式之前reverse the string,然后反转结果。
public static String g(StringBuilder s){return new StringBuilder(s.reverse().toString().replaceAll("(?s)(.)(?=.*\\1)", "")).reverse().toString();}
注意我建议在正则表达式中添加(?s)
(= Pattern.DOTALL
内联修饰符标记),以便.
可以匹配包含换行符的任何符号(a {默认情况下,{1}}与所有换行符不匹配。