Как разделить текст при обнаружении строки » n» и пробела?

#java #arrays #regex #arraylist #split

#java #массивы #регулярное выражение #arraylist #разделить

Вопрос:

например

у меня есть строка типа

 String example = "HellonHownArenyou today? I Love Pizza"; //
 

Мне нужен такой массив

 [Hello, n, How, n, Are, n, you, today? , I , Love, Pizza]
 

Я уже пробовал

 String[] splited = example.split("[\n\s] ");// as will a lot of regular exprisions like ("\n\r ")  etc.
 

но они не сработали.

у кого-нибудь есть решение, пожалуйста?

Комментарии:

1. s соответствует пробелам, которые включают n или r или четные t . Поэтому не используйте его, если вы не хотите, чтобы он разделялся n . Используйте " " вместо этого. Теперь для обработки n вы можете использовать механизм обхода , чтобы описать место, которое n находится до или после него.

2. Вывод должен содержать пробел после today? и I ?

3. @Pshemo , я уже пробовал » » , но ничего не произошло, он разделился пробелами, но не с \n

4. @Thefourthbird нет, это просто разделение при обнаружении пробела.

Ответ №1:

Вы можете разделить утверждение либо последовательности перевода строки R слева или справа, либо сопоставить горизонтальный символ пробела h , используя чередование |

 (?=\R)|(?<=\R)|\h
 

Демонстрация Java

Например

 String example = "HellonHownArenyou today? I Love Pizza"; //
String[] splited = example.split("(?=\R)|(?<=\R)|\h");
for (String element : splited) {
    if (element.equals("n")) element = "newline";
    System.out.println(element);
}
 

Вывод

 Hello
newline
How
newline
Are
newline
you
today?
I
Love
Pizza
 

Ответ №2:

Вы можете сделать это просто, используя lookbehind (указанный ) или lookahead ?<= (указанный ?= ) для n и чередуется с s (для пробелов).

ДЕМОНСТРАЦИЯ:

 import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String example = "HellonHownArenyou today? I Love Pizza"; //
        String[] splited = example.split("(?<=\n)|(?=\n)|\s ");
        System.out.println(Arrays.toString(splited));
    }
}
 

Вывод:

 [Hello, 
, How, 
, Are, 
, you, today?, I, Love, Pizza]
 

Ответ №3:

 // Split on the following:
// look ahead for 'n' which is preceded by a character that is not 'n'
// OR look ahead for a character that is not 'n' preceded by 'n'
// OR a single space.
String regex = "(?=\n)(?<!\n)|(?!\n)(?<=\n)| ";

String example = "HellonHownArenyou today? I Love Pizza";

// This is the array that you want.
String[] splited = example.split(regex);

// This is just to display the contents of 'splited'.
int count = 0;
for (String part : splited) {
    count  ;
    if (part.equals("n")) {
        // Rather than print the actual newline, print its escape sequence
        System.out.printf("-. \n%n", count);
    }
    else {
        System.out.printf("-. %s%n", count, part);
    }
}
 

Результат:

  1. Hello
 2. n
 3. How
 4. n
 5. Are
 6. n
 7. you
 8. today?
 9. I
10. Love
11. Pizza
 

Комментарии:

1. Проблема в том, что мне нужен массив с этими ответами, и я не хочу печатать » n» Спасибо за ответ @Abra