2009-11-26 15 views

Antwort

11
System.out.println("  AA  BB".replaceAll("\\s+", " ").trim()); 

Ausgang:

Hinweis: Im Gegensatz zu einigen der anderen Lösungen hier diese ersetzt auch eine einzelne Registerkarte mit einem einzigen Raum. Wenn Sie Sie verwenden können keine Tabs "{2,}" statt, die noch schneller sein wird:

System.out.println("  AA  BB".replaceAll(" {2,}", " ").trim()); 
+1

Danke ein Haufen .. :) –

7

Ersetzen Sie zwei oder mehr Räume "\\s{2,}" von einem einzigen Raum " " und trim() danach tun der führenden loszuwerden und Leerzeichen am Ende, wie Sie im ersten Beispiel zeigt.

output = input.replaceAll("\\s{2,}", " ").trim(); 
2
s = s.replaceAll("\\s+", " ").trim(); 
0

Es gibt richtige Antworten hier, zB:

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

Aber Ich denke, es ist auch wichtig, die richtige Frage zu wählen. Anstatt nach dem Trimmen eines String mit regulären Ausdrücken zu fragen, warum fragen Sie nicht einfach nach dem Trimmen des String, und erlauben Sie den Leuten zu antworten, Ihnen die beste Strategie zu zeigen?

Es kann durchaus bessere Möglichkeiten geben, Leerzeichen zu reduzieren als einen regulären Ausdruck zu verwenden. Es gibt sicherlich andere Möglichkeiten.

+0

Die Frage wurde bearbeitet. Könnten Sie mir bitte einen besseren Weg zeigen? Vielen Dank. –

+0

Ich wollte damit nicht sagen, dass es einen unbestreitbar besseren Weg gab. Wenn ich eines wüsste, hätte ich dir bestimmt gesagt, ohne darauf zu bestehen, dass die Frage zuerst geändert wird. Ich wollte nur darauf hinweisen, dass es möglich war, dass Sie die Reaktionen aufgrund einer Annahme der richtigen Strategie einschränken. Ich würde sagen, dass, wenn Sie nicht sehr starke Leistungsgründe haben, mit Alternativen zu experimentieren, die Regex-Route wahrscheinlich das ist, was ich tun würde. – roryparle

Verwandte Themen