我怎样才能转换;aaabbbc";至;AabBc“;在Java中使用正则表达式?
我试过这个:我怎样才能转换;aaabbbc";至;AabBc“;在Java中使用正则表达式?,java,regex,Java,Regex,我试过这个: str.replaceAll("(.)\\1+", "$1"); 但是我得到的结果是Aabbbc,但是b之前就已经出现了 如何删除第二次出现的b 更新 其目的是在第一次出现字母表后删除所有重复的字母表。 此外,大写字母和小写字母的处理方式也将有所不同。目前为止,我能想到的使用正则表达式的最佳解决方案(尽管仍然很奇怪)如下所示 如果我能找到一个不需要反转字符串的解决方案,我会更新它 RegexTest.java import java.lang.StringBuilder; p
str.replaceAll("(.)\\1+", "$1");
但是我得到的结果是Aabbbc,但是b之前就已经出现了
如何删除第二次出现的b
更新
其目的是在第一次出现字母表后删除所有重复的字母表。
此外,大写字母和小写字母的处理方式也将有所不同。目前为止,我能想到的使用正则表达式的最佳解决方案(尽管仍然很奇怪)如下所示 如果我能找到一个不需要反转字符串的解决方案,我会更新它
RegexTest.java
import java.lang.StringBuilder;
public class RegexTest {
public static String removeDupeLetters(String input) {
// Because look-behinds have to be fixed width, we have to use look-aheads instead.
// As a result of that we'll have to reverse the string and start from the end. (And then reverse the result again)
return reverseString(reverseString(input).replaceAll("([A-Za-z])(?=.*\\1)", ""));
}
// helper function for reversing a String
public static String reverseString(String input) {
return new StringBuilder(input).reverse().toString();
}
public static void main(String[] args) {
final String[] inputs = {"AaabBbc", "Banana", "Semester", "AaaaaaaaAaaaaa"};
for (String input : inputs) {
System.out.println("Input: " + input);
System.out.println("Output: " + removeDupeLetters(input));
System.out.println();
}
}
}
javac RegexTest.java&&java RegexTest
Input: AaabBbc
Output: AabBc
Input: Banana
Output: Ban
Input: Semester
Output: Semstr
Input: AaaaaaaaAaaaaa
Output: Aa
注意:正如评论中指出的,使用一个根本不涉及正则表达式的解决方案可能更有意义,请参阅。。。不过还是很有趣:D逻辑是什么?您想从
Aaa
中获取Aa
,但您想将Bbb
变成B
。要澄清/更新您的问题,请使用选项。如果我理解正确,您想删除字符串中先前出现的所有字符吗?如果是这样,这真的不是正则表达式的任务。str.replace(“aaabbbc”,“AabBc”)
符合您所述的要求。这是充分说明您的需求的一个教训。我们谁也不知道你到底想应用什么规则。你能告诉我们X问题而不是Y问题吗(参见)