Разделение строки не дает ожидаемого результата

#java #regex #string #split

Вопрос:

Я хочу разделить заданную строку в соответствии с заданным форматом -> > ,;:.?! .То, что я делаю, приведено ниже, но всякий раз, когда она сталкивается с более чем 1 пробелом, она добавляет пространство в массив. Мне просто нужно слово, а не пространство.

вход::
hello Hello HEllo hi hi: hi! Welcome, welcome

выход::
13
привет

, привет, привет, привет, привет

привет

Добро пожаловать

добро пожаловать

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ::
8
привет
Привет
Привет
привет
привет
привет
привет Добро пожаловать Добро
пожаловать

 import java.util.Scanner;

class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        String[] arr = s.split("[ ,;:.?!]");
        System.out.println(arr.length);
        for (String string : arr) {
            System.out.println(string);
        }
    }
}
 

Ответ №1:

Ваше регулярное выражение, соответствующее только 1 символу, вы можете добавить {1,2} к нему, чтобы оно соответствовало 1 или 2 символам, или даже заменить его на 1 или более.

 import java.util.Scanner;

class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        String[] arr = s.split("[ ,;:.?!]{1,2}");
        System.out.println(arr.length);
        for (String string : arr) {
            System.out.println(string);
        }
    }
}
 

Ответ №2:

Попробуйте обрезать веревку.

 System.out.println(string.trim());
 

Или, как говорили другие, вы можете избежать символа пробела, как это:

 String[] arr = s.split("[\s ,;:.?!]");