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 № 1String.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.replaceAll
możesz użyć wyrażenia regularnego, aby wykonać całą operację:
return arg.replaceAll("[^A-Za-z0-9]", "");