Автор оригинала: Sera.Ng.
Класс String предоставляет разработчикам еще один вариант разделения строки на слова на основе определенных разделителей-метод split (). Метод split() может разбивать строку на токены с определенными разделителями, как и класс сканера, с которым мы столкнулись в предыдущей части. Однако есть 2 основных отличия от класса сканеров:
- Метод split() не использует пробелы в качестве разделителя. Поэтому, если мы хотим использовать пробелы в качестве разделителей, нам нужно явно указать это.
- Метод split() возвращает массив строк, содержащий извлеченные токены. Это очень удобно, если мы планируем обработать эти токены позже. Давайте рассмотрим пример:
public class Demo { public static void main(String[] args){ String tokens[]; String s = "I love you so much! But I cannot marry you."; tokens = s.split("[ ]"); for (String token : tokens) { System.out.println(token); } } }
В программе у меня есть следующая строка:
String s = "I love you so much! But I cannot marry you.";
Я хочу разбить строку на подстроки или маркеры на основе пробелов. Я могу выполнить эту задачу следующим образом:
tokens = s.split("[ ]");
Поскольку метод split() возвращает массив извлеченных токенов, нам нужен цикл или что-то подобное, чтобы получить эти токены:
for (String token : tokens) { System.out.println(token); }
Запустите программу, и у нас будут результаты:
I love you so much! But I cannot marry you.
В случае, если вы хотите указать больше символов в качестве разделителей, вы можете сделать, как показано ниже, для чего я использую как пробелы, так и восклицательный знак (!):
tokens = s.split("[ !]");
Полный пример:
public class Demo { public static void main(String[] args){ String tokens[]; String s = "I love you so much! But I cannot marry you."; tokens = s.split("[ !]"); for (String token : tokens) { System.out.println(token); } System.out.println("Number of tokens: " + tokens.length); } }
Обратите внимание, что в приведенном выше примере я также распечатал длину массива токенов, которые, конечно же, были количеством извлеченных токенов. У меня есть выход:
I love you so much But I cannot marry you. Number of tokens: 11
Это потому, что я использовал как пробелы, так и восклицательный знак в качестве разделителей, и было время, когда эти два символа появлялись рядом друг с другом. И это заставило метод split() рассматривать их как пустой токен. Если мы хотим удалить пустой маркер, что означает, что соседние разделители рассматриваются как один, нам просто нужно добавить знак плюс (+) в конце шаблона. Как показано ниже:
tokens = s.split("[ !]+");
Запустите программу, и мы получим следующий результат:
I love you so much But I cannot marry you. Number of tokens: 10
И, как вы можете видеть, теперь у нас есть только 10 жетонов. Помимо использования определенных символов в качестве разделителей, мы можем предоставить регулярное выражение методу split() в качестве параметров. Давайте посмотрим следующую программу:
public class Demo { public static void main(String[] args){ String tokens[]; String s = "I love you 4 so much. 34 I 23 want to marry you"; tokens = s.split("[\\s\\d]+"); for (String token : tokens) { System.out.println(token); } System.out.println("Number of tokens: " + tokens.length); } }
В программе у меня есть следующая строка:
String s = "I love you 4 so much. 34 I 23 want to marry you";
И я хочу получить маркеры на основе цифр и пробелов. Я могу написать метод split() следующим образом:
tokens = s.split("[\\s\\d]+");
В параметризованном шаблоне, У меня есть
- \s: представляет символы пробела. Также имейте в виду, что пробелы включают в себя: пробел, табуляцию, новую строку (\n), перевод строки (\f) и возврат каретки (\r)
- \d: представляет для цифр, с которыми вы уже должны быть знакомы Запустите программу, и у нас есть:
I love you so much. I want to marry you Number of tokens: 10
Как вы можете видеть в выводе, у нас всего 10 токенов, что означает, что был пустой токен.
Предыдущая часть
Следующая часть
—
Посетите learnbyproject.net для бесплатных Курсов регулярного выражения и других бесплатных курсов
Оригинал: “https://www.codementor.io/@seranguyen/java-regular-expression-part-8-extracting-text-with-string-split-tq742g14q”