Nie użyłbym regex:
public class Test {
public void test() {
System.out.println(removeTrailingDupes("abcdaaaaefghaaaaaaaaa"));
System.out.println(removeTrailingDupes("012003400000000"));
System.out.println(removeTrailingDupes("0120034000000001"));
System.out.println(removeTrailingDupes("cc"));
System.out.println(removeTrailingDupes("c"));
}
private String removeTrailingDupes(String s) {
// Is there a dupe?
int l = s.length();
if (l > 1 && s.charAt(l - 1) == s.charAt(l - 2)) {
// Where to cut.
int cut = l - 2;
// What to cut.
char c = s.charAt(cut);
while (cut > 0 && s.charAt(cut - 1) == c) {
// Cut that one too.
cut -= 1;
}
// Cut off the repeats.
return s.substring(0, cut);
}
// Return it untouched.
return s;
}
public static void main(String args[]) {
new Test().test();
}
}
Aby dopasować @ "SPEC" JonSkeet za:
pamiętać, że będzie tylko usunąć znaki, które są powielone na końcu. Oznacza to, że ciągi znaków nie będzie pojedynczy być dotykana, ale struny dwuznakowego może stać pusty, jeśli obie postacie są takie same:
"" => ""
"x" => "x"
"xx" => ""
"aaaa" => ""
"ax" => "ax"
"abcd" => "abcd"
"abcdddd" => "abc"
Zastanawiam się, czy byłoby możliwe, aby osiągnąć ten poziom kontroli w regex?
Dodano w wyniku ... ale jeśli użyjemy tego wyrażenia na przykład na aaaa, to nic nie zwraca. Powinno to zwrócić aaaa. komentarz:
Zamiast zastosowanie:
private String removeTrailingDupes(String s) {
// Is there a dupe?
int l = s.length();
if (l > 1 && s.charAt(l - 1) == s.charAt(l - 2)) {
// Where to cut.
int cut = l - 2;
// What to cut.
char c = s.charAt(cut);
while (cut > 0 && s.charAt(cut - 1) == c) {
// Cut that one too.
cut -= 1;
}
// Cut off the repeats.
return cut > 0 ? s.substring(0, cut): s;
}
// Return it untouched.
return s;
}
który ma umowę:
"" => ""
"x" => "x"
"xx" => "xx"
"aaaa" => "aaaa"
"ax" => "ax"
"abcd" => "abcd"
"abcdddd" => "abc"
Tylko jeden znak powtarza? – Sam
Czy ostatni znak jest zawsze powtarzany? – Loamhoof
Nie, ostatnia postać nie zawsze się powtarza. Może zawierać sekwencję co najmniej 2 znaków na końcu. Jedna postać nie jest uważana za powtarzającą się. –