Qual è una buona alternativa delle funzioni JavaScript ltrim()
e rtrim()
in Java?Qual è una buona alternativa di LTRIM e RTRIM in Java?
risposta
Con un'espressione regolare si potrebbe scrivere:
String s = ...
String ltrim = s.replaceAll("^\\s+","");
String rtrim = s.replaceAll("\\s+$","");
Se dovete farlo spesso, è possibile creare e compilare un modello per migliorare le prestazioni:
private final static Pattern LTRIM = Pattern.compile("^\\s+");
public static String ltrim(String s) {
return LTRIM.matcher(s).replaceAll("");
}
Da una performance prospettiva, un rapido benchmark mostra (post compilazione JIT) che l'approccio regex è circa 5 volte più lento del ciclo (0,49s contro 0,11s per 1 milione ltrim).
Personalmente trovo l'approccio regex più leggibile e meno soggetto a errori, ma se le prestazioni sono un problema dovresti usare la soluzione loop.
'replaceFirst' è migliore – leventov
Utilizzando espressioni regolari può essere bello, ma è un bel po 'più lento rispetto a semplici funzioni di taglio:
public static String ltrim(String s) {
int i = 0;
while (i < s.length() && Character.isWhitespace(s.charAt(i))) {
i++;
}
return s.substring(i);
}
public static String rtrim(String s) {
int i = s.length()-1;
while (i >= 0 && Character.isWhitespace(s.charAt(i))) {
i--;
}
return s.substring(0,i+1);
}
Fonte: http://www.fromdev.com/2009/07/playing-with-java-string-trim-basics.html
Inoltre, ci sono alcune librerie che forniscono tali funzioni. Ad esempio, Spring StringUtils. Apache Commons StringUtils fornisce funzioni simili anche: strip, stripStart, stripEnd
StringUtils.stripEnd("abc ", null) = "abc"
+1. Non chiamerei questo "assetto", perché String # non taglia gli spazi bianchi, taglia i caratteri di controllo e alcuni spazi bianchi solo per ASCII. Commons Lang chiama la loro versione (che fa quello che fai e quello che probabilmente tutti vogliono) "strip". – Thilo
Un altro +1 se potessi il collegamento a StringUtils in Spring, che ha "trimLeadingWhitespace". – Thilo
Sì, @Thilo ha ragione. Per farlo funzionare come la funzione di rifinitura java originale, basta cambiare il condizionale a 's.charAt (i) <= '''. – bezmax
Sulla base della risposta del @bezmax ho avuto uno sguardo alla primavera StringUtils
, ma non poteva giustificare la sovraccarico per me di passare al framework Spring. Pertanto ho deciso di creare una classe Characters
per stringere facilmente i left/right trim per ogni dato carattere (-class). La classe è disponibile su GitHub.
Characters.valueOf('x').trim(...)
Characters.valueOf('x').leftTrim(...)
Characters.valueOf('x').rightTrim(...)
Se volete tagliare per gli spazi bianchi, c'è una classe caratteri predefiniti disponibili:
Characters.WHITESPACE.trim(...)
Characters.WHITESPACE.leftTrim(...)
Characters.WHITESPACE.rightTrim(...)
La classe fa funzione anche altri tipi di operazioni di carattere, come condense
, replace
o split
.
import org.apache.commons.lang3.StringUtils;
private String rTrim(String str) {
return StringUtils.stripEnd(str, /*stripChars*/" ");
}
private String lTrim(String str) {
return StringUtils.stripStart(str, /*stripChars*/" ");
}
Guava ha CharMatcher trimLeadingFrom e trimTrailingFrom
esempio CharMatcher.whitespace.trimTrailingFrom(s)
- 1. TRIM RTRIM LTRIM Performance
- 2. impossibile installare id3 per php - qual è la buona alternativa?
- 3. Qual è una buona alternativa per le proprietà statiche memorizzate di tipi generici in swift?
- 4. Il titolo di history.pushState non è supportato, qual è una buona alternativa?
- 5. Qual è una buona alternativa all'attivazione di una stored procedure 368 volte per aggiornare il database?
- 6. Che cosa è una buona alternativa per openinviter in Django
- 7. Alternativa a Page_Load in ASP.NET (e una buona storia WTF)
- 8. Qual è una buona analogia per capire IoC e DI?
- 9. qual è una buona alternativa a questo brutto costrutto, in C++?
- 10. Buona alternativa agli script batch di Windows?
- 11. clickonce: qual è una buona alternativa open source a clickonce? (DDay.Update)?
- 12. Qual è una buona alternativa a SQL Server per le applicazioni ASP.NET?
- 13. Qual è una buona alternativa open source a Kannel per il gateway SMS?
- 14. RTrim in javascript
- 15. Buona alternativa a eregi() in PHP
- 16. Qual è una buona impostazione per noCompressionUserAgents in Tomcat?
- 17. Esiste una buona alternativa all'estensione SOAP di PHP?
- 18. È buona pratica usare assert in Java?
- 19. Esiste una buona distribuzione e amministrazione per gli ambienti Java?
- 20. Java - Questa è una buona pratica di programmazione?
- 21. Qual è una buona metafora per l'iniezione delle dipendenze?
- 22. Qual è una buona dimensione del metodo medio?
- 23. Qual è una buona implementazione degli eventi deboli per silverlight?
- 24. Alternativa Java MVVM e WPF
- 25. Qual è l'ultima e migliore alternativa a Flash?
- 26. È un aliasing vuoto shared_ptr una buona alternativa a un no-op che elimina shared_ptr?
- 27. JWT: Qual è una buona chiave segreta e come conservarla in un'app Node.js/Express?
- 28. XMLAGG con RTRIM problema
- 29. Qual è una buona guida per i pannelli WPF e il layout in generale?
- 30. qual è la soluzione alternativa per paymentWithProductIdentifier?
Stavo per indicarti Commons Lang StringUtils, ma non hanno ltrim/rtrim (o lstrip/rstrip). +1 poi ... – Thilo
@Thilo, sì, lo fanno. Guarda la mia ultima modifica alla mia risposta. – bezmax
@Max: Grazie, ho ripristinato la fiducia nella mia libreria preferita. – Thilo