Как заменить все пустые строки на «@»? - PullRequest
0 голосов
/ 12 апреля 2019

Если у меня есть список:

List<Strings> lines = new ArrayList<String>();
lines.add("one");
lines.add("");
lines.add("two three");

, который дает мне следующее при преобразовании его в строку, например this.str:

one

two three

Я пытаюсь создатьметод, который считает количество строк, но не распознает пустую строку.Я попытался сделать это:

this.str = this.str.replaceAll("\n", "@");
String[] words = this.str.split("[\\r\\n]+");

Если бы я позвонил System.out.println(Arrays.toString(words), я ожидал получить [one, @, two three], однако вместо этого я получил [one@@two three].Как мне это решить?

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

this.str фактически содержит строку: one\n\ntwo three. Вот почему после выполнения: this.str = this.str.replaceAll ("\ n", "@"); this.str содержит теперь: «один @@ два три».

Число @ - это количество новых строк, которые были у вас в this.str. Теперь, если вы делаете:

String[] words = this.str.split("@");

вы получите ["one", "", "two three"], то есть количество строк, которые вы имели в оригинале this.str

1 голос
/ 12 апреля 2019

На самом деле, вывод правильный.

Строка str имеет два символа новой строки после слова "one".

one\n
\n
two three

+ в регулярном выражении:

this.str.split("[\\r\\n]+");

означает один или несколько . Дело в том, что вы разделяете после замены \ n символа! , так что теперь у вас есть единственная строка в массиве.

Изменить это:

this.str.split("[\\r\\n]+");

с этим:

this.str.split("@");
...