Удалите все несимвольные символы из массива String в java
Я пытаюсь написать метод, который удаляет все неалфавитные символы из Java String[]
, а затем преобразует строку в строчную строку. Я попытался использовать регулярное выражение, чтобы заменить появление всех неалфавитных символов на ""
. Однако результат, который я получаю, не в состоянии сделать это. Вот код
static String[] inputValidator(String[] line) {
for ( int i = 0; i < line.length; i++) {
line[i].replaceAll("[^a-zA-Z]", "");
line[i].toLowerCase();
}
return line;
}
Однако, если я попытаюсь предоставить вход, который не имеет алфавитов (например, -
или .
), вывод также состоит из них, поскольку они не удаляются.
Пример ввода
A dog is an animal. Animals are not people.
Результат, который я получаю
A
dog
is
an
animal.
Animals
are
not
people.
Ожидаемый результат
a
dog
is
an
animal
animals
are
not
people
Ответы
Ответ 1
Проблема заключается в том, что ваши изменения не сохраняются, потому что строки immutable. Каждый вызов возвращает новый String
, представляющий изменение, при этом текущий String
остается неизменным. Вам просто нужно сохранить возвращенный String
обратно в массив.
line[i] = line[i].replaceAll("[^a-zA-Z]", "");
line[i] = line[i].toLowerCase();
Поскольку каждый метод возвращает String
, вы можете объединить вызовы методов. Это выполнит второй вызов метода на результат первого, что позволит вам выполнять оба действия в одной строке.
line[i] = line[i].replaceAll("[^a-zA-Z]", "").toLowerCase();
Ответ 2
Вам нужно назначить результат вашего регулярного выражения на строки [i].
for ( int i = 0; i < line.length; i++) {
line[i] = line[i].replaceAll("[^a-zA-Z]", "").toLowerCase();
}
Ответ 3
Это не работает, потому что строки неизменяемы, вам нужно установить значение
например.
line[i] = line[i].toLowerCase();
Ответ 4
Вы должны переназначить результат toLowerCase()
и replaceAll()
на line[i]
, так как Java String
является неизменяемым (его внутреннее значение никогда не изменяется, а методы в классе String
возвращают новый String
> вместо изменения объекта String
).
Ответ 5
Классный (но немного громоздкий, если вам не нравится кастинг) способ делать то, что вы хотите сделать, - пройти через всю строку, индексировать по индексу, отбрасывая каждый результат из String.charAt(index) в (byte), а затем проверяя, является ли этот байт либо а) в числовом диапазоне строчных буквенных символов (a = 97 до z = 122), и в этом случае верните его обратно в char и добавьте его в строку, array или what-have-you или b) в числовом диапазоне букв верхнего регистра (A = 65 до Z = 90), и в этом случае добавьте 32 (A + 22 = 65 + 32 = 97 = a ) и добавьте его в char и добавьте его. Если он не находится ни в одном из этих диапазонов, просто отбросьте его.
Ответ 6
Как он уже ответил, просто подумал о том, чтобы поделиться еще одним способом, который здесь не упоминался.
str = str.replaceAll("\\P{Alnum}", "").toLowerCase();