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], иначе оно включало бы несколько не- альфа-символы в диапазоне, включая [, , ], ^ и т. д.

Другие вопросы по тегам