#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
Например
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