使用正则表达式从字符串中删除重复字符,保持第一次出现
Remove duplicated characters from String using regex keeping first occurances
我知道如何从字符串中删除重复的字符并在没有正则表达式的情况下保留第一次出现的字符:
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 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;}
我想知道是否可以使用正则表达式和字符串输入来缩短时间。但即使它更长,我也只是好奇是否可以使用正则表达式从字符串中删除重复的字符,同时保留每个字符的第一次出现。
它不是最短的选项,不仅涉及正则表达式,而且仍然是一个选项。您可以在 运行 之前 reverse the string 您拥有的正则表达式,然后将结果反转回来。
public static String g(StringBuilder s){
return new StringBuilder(
s.reverse().toString()
.replaceAll("(?s)(.)(?=.*\1)", ""))
.reverse().toString();
}
请注意,我建议将 (?s)
(= Pattern.DOTALL
内联修饰符标志)添加到正则表达式中,以便 .
可以匹配 任何 符号,包括换行符(默认情况下 .
不匹配所有换行符)。
我知道如何从字符串中删除重复的字符并在没有正则表达式的情况下保留第一次出现的字符:
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 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;}
我想知道是否可以使用正则表达式和字符串输入来缩短时间。但即使它更长,我也只是好奇是否可以使用正则表达式从字符串中删除重复的字符,同时保留每个字符的第一次出现。
它不是最短的选项,不仅涉及正则表达式,而且仍然是一个选项。您可以在 运行 之前 reverse the string 您拥有的正则表达式,然后将结果反转回来。
public static String g(StringBuilder s){
return new StringBuilder(
s.reverse().toString()
.replaceAll("(?s)(.)(?=.*\1)", ""))
.reverse().toString();
}
请注意,我建议将 (?s)
(= Pattern.DOTALL
内联修饰符标志)添加到正则表达式中,以便 .
可以匹配 任何 符号,包括换行符(默认情况下 .
不匹配所有换行符)。