/ / String.replaceAll nie ma zastosowania do żadnego rodzaju znaków [duplicate] - java, string, replaceall

String.replaceAll nie ma zastosowania do żadnego rodzaju znaków [duplicate] - java, string, replaceall

Więc to, co mam, to ta prosta metoda, która powinna usunąć wszystkie znaki oprócz wielkich i małych liter i cyfr z ciągu.

public static String toSimple(String arg) //redurziert einen String auf Buchstaben und ganze Zahlen
{
String string = arg;
int i = 0;
while ( i < string.length())
{
if (((int)string.charAt(i) >= 48 && (int)string.charAt(i) <= 57)||((int)string.charAt(i) >= 65 && (int)string.charAt(i) <= 90)||((int)string.charAt(i) >= 97 && (int)string.charAt(i) <= 121))
i+=1;
else
{
int a = string.length();
string = string.replaceAll(""+string.charAt(i), "");

if (!(string.length() < a)) //Just in case
{
i+=1;
}
}

Problem polega na tym, że w niektórych przypadkach string.replaceAll nie zmieni niczego, mimo że osiągnie i dapostać. Sprawdziłem to w debugerze i nie mogłem znaleźć żadnych widocznych błędów lub wyjątków. Nie sprawdziłem całej tablicy ASCII, wiem, że problem wystąpi dla "$" "?" i ".". Wszelkie sugestie, jak to rozwiązać?

Odpowiedzi:

2 dla odpowiedzi № 1

String.replaceAll jako pierwszy parametr przyjmuje wyrażenie regularne.

$, ? i . są znakami specjalnymi w wyrażenia regularne.

Posługiwać się String.replace zamiast tego - to również używa wewnętrznych wyrażeń regularnych, ale poprawnie usuwa znaki.


Jednak biorąc pod uwagę, że używasz String.replaceAllmożesz użyć wyrażenia regularnego, aby wykonać całą operację:

return arg.replaceAll("[^A-Za-z0-9]", "");