Как разбить строку (сопоставив набор регулярных выражений) на токены и распечатать каждый токен в JAVA ?
Задана строка s, соответствующая регулярному выражению [A-Za-z !,?._'@]+, разделите строку на токены. Мы определяем токен как одну или несколько последовательных букв английского алфавита. Затем выведите количество токенов, а затем каждый токен в новой строке.
входной формат
Одна строка, s.
s состоит из букв английского алфавита, пробелов и любого из следующих символов:!,?._'@
выходной формат
В первой строке выведите целое число n, обозначающее количество токенов в строке s (они не обязательно должны быть уникальными). Затем выведите каждый из N токенов в новой строке в том же порядке, в каком они появляются во входной строке s .
Пример Ввода
He is a very very good boy, isn't he?
Пример Вывода
10<br /> He<br /> is<br /> a<br /> very<br /> very<br /> good<br /> boy<br /> isn<br /> t<br /> he
Что я уже пробовал:
мой код:
import java.io.*; import java.util.*; import java.util.regex.*; public class Solution { public static void main(String[] args) { Scanner scan = new Scanner(System.in); String s = scan.nextLine(); scan.close(); String[] splitString = (s.replaceAll("^[\\W+\\s+]", "").split("[\\s!,?._'@]+")); System.out.println(splitString.length); for (String string : splitString) { System.out.println(string); } } }
Этот код отлично работает для примера ввода, но не проходит этот тестовый случай.
Тестовый пример:
Ввод:
< >YES leading spaces are valid, problemsetters are evillllll
Ожидаемый Результат:
8<br /> YES<br /> leading<br /> spaces<br /> are<br /> valid<br /> problemsetters<br /> are<br /> evillllll<br />
Какие изменения в коде пройдут этот тестовый случай ?
Richard MacCutchan
String[] splitString = (s.replaceAll("^[\\W+\\s+]", "").split("[\\s!,?._'@]+"));
Строки, подобные приведенным выше, невозможно отладить. Разделите его на отдельные операторы, чтобы вы могли видеть результат каждой части во время выполнения вашей программы.