Java- Как найти не алфавитные буквы в строке? (Быстрый способ)
В Java дана строка, например, "abc@df", где символ "@" может быть ЛЮБОЙ другой не-буквой, например, "%", "^", "&" и т. Д. Какой самый эффективный способ найти этот индекс? Я знаю, что цикл for будет довольно быстрым (в зависимости от длины строки), но как насчет других более быстрых методов? Метод, который находит все индексы не алфавитных букв или ближайший к данному индексу (например, indexOf(string, initialIdx)). Спасибо!
4 ответа
Для цикла for вы можете использовать класс Character, чтобы определить, является ли каждый символ буквой (или другим типом). См.: https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html.
Вы, вероятно, должны использовать регулярное выражение:
Pattern patt = Pattern.compile("[^A-Za-z]");
Matcher mat = patt.matcher("avc@dgh");
boolean found = mat.find();
System.out.println(found ? mat.start() : -1);
Вы можете использовать регулярное выражение для разделения строки на все, что не является буквенным:
String str = "abc@df";
String[] split = str.split("[^A-za-z]");
Затем вы можете использовать длину строк в этом массиве, чтобы найти индекс небуквенных символов:
int firstIndex = split[0].length();
И так далее:
int secondIndex = firstIndex + split[1].length();
Я понимаю, что это устарело, однако в паре приведенных выше ответов на регулярные выражения указано [^A-za-z], однако я ожидаю, что они намеревались сказать [^A-Za-z], иначе оно включало бы несколько не- альфа-символы в диапазоне, включая [, , ], ^ и т. д.