GaneshRfromSpace Ответов: 1

Как разбить строку (сопоставив набор регулярных выражений) на токены и распечатать каждый токен в 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!,?._'@]+"));

Строки, подобные приведенным выше, невозможно отладить. Разделите его на отдельные операторы, чтобы вы могли видеть результат каждой части во время выполнения вашей программы.

1 Ответов

Рейтинг:
7

GaneshRfromSpace

Наконец, после серьезных изменений мой код отлично работал для всех тестовых случаев.
Разместите его здесь, Если кто-нибудь в будущем столкнется с такой же проблемой.

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();
        if (s.trim().isEmpty()) {
			System.out.println(0);
        }
        else{
        String[] splitString = (s.replaceAll("^\\W+", "").split("[\\s!,?._'@]+"));
        System.out.println(splitString.length);
        for (String string : splitString) {
        	System.out.println(string);
        }
        }
    }
}


Maciej Los

Отличный. Отметьте его как ответ (зеленая кнопка), чтобы удалить ваш вопрос из списка без ответа.