Лучший способ обрезки пробелов в строке - PullRequest
5 голосов
/ 27 ноября 2009

Как мне обрезать пробелы внутри, оставляя только одно пространство с учетом производительности?

Input:
     AA     BB
Output:
AA BB

Input:
A      A
Output:
A A

Ответы [ 5 ]

11 голосов
/ 27 ноября 2009
System.out.println("     AA     BB".replaceAll("\\s+", " ").trim());

Выход:

AA BB

Примечание. В отличие от некоторых других решений, представленных здесь, это также заменяет одну вкладку одним пробелом. Если у вас нет вкладок, вы можете вместо этого использовать «{2,}», что будет еще быстрее:

System.out.println("     AA     BB".replaceAll(" {2,}", " ").trim());
7 голосов
/ 27 ноября 2009

Замените два или более пробелов "\\s{2,}" на один пробел " " и затем выполните trim(), чтобы избавиться от начальных и конечных пробелов, как показано в 1-м примере.

output = input.replaceAll("\\s{2,}", " ").trim();
2 голосов
/ 27 ноября 2009
s = s.replaceAll("\\s+", " " ).trim();
0 голосов
/ 27 ноября 2009

Здесь есть правильные ответы, например ::10000

s = s.replaceAll("\\s+", " " ).trim();

Но я думаю, что также важно выбрать правильный вопрос. Вместо того, чтобы спрашивать об обрезке String с помощью регулярных выражений, почему бы просто не спросить об обрезке String и не дать людям, отвечающим, показать вам лучшую стратегию?

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

0 голосов
/ 27 ноября 2009

"Hello a a g g a gag gs gs@".replaceAll( "[ ]+{2}", " ") ).trim();

...