Так что у меня есть этот простой метод, который должен удалить все символы, кроме букв и цифр в верхнем и нижнем регистре из строки.String.replaceAll не применяется к любому типу символов
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;
}
}
Проблема заключается в том, что в некоторых случаях string.replaceAll
ничего не изменится, хотя достигнут и по своему характеру. Я проверил его в отладчике и не обнаружил никаких явных ошибок или исключений. Я не проверял всю таблицу ASCII, я знаю, что проблема будет возникать для '$' '?' а также '.'. Любые предложения, как это решить?
Обратите внимание, что символьные литералы могут быть использованы вместо «магических чисел» - поэтому '(int) string.charAt (i)> = 48' может быть записано как' string.charAt (i)> = '0'', что делает его намного более очевидным, что вы имеете в виду. (Приведение в 'int' не обязательно в любом случае). –
Это довольно ужасный способ удалить символы из строки. И это не сработает. Попробуйте строку «,,, + a» - она не удалит «+». Обычно вы строили бы новую String в StringBuilder, но даже если бы вы делали это так, вы бы использовали 'String.substring' дважды, чтобы получить строку до и после символа. –