2012-08-24 9 views
7

Powiel możliwe:
Strip Leading and Trailing Spaces From Java Stringusunięcie spacji na końcu łańcucha w Javie

Kiedy importować dane do aplikacji muszę się pozbyć przestrzeni na końcu pewne ciągi, ale nie te na początku, więc nie mogę użyć trim() ... mam skonfigurować metodę:

public static String quitarEspaciosFinal(String cadena) { 
    String[] trozos = cadena.split(" "); 
    String ultimoTrozo = trozos[trozos.length-1]; 
    return cadena.substring(0,cadena.lastIndexOf(ultimoTrozo.charAt(ultimoTrozo.length()-1))+1); 
    } 

gdzie Cadena jest ciąg muszę przekształcić ...

Tak więc, jeśli Cadena = „1234” to metoda wróci „1234” ...

Chciałabym wiedzieć, czy istnieje bardziej wydajny sposobem, aby to zrobić ...

+0

Czy ciąg jest tylko jednym słowem, czy może to zdanie? – oopsi

+0

@oopsi: właściwie nie ma znaczenia ^^ – m0skit0

Odpowiedz

21

można użyć replaceAll() sposób na ciąg, z regex \s+$:

return cadena.replaceAll("\\s+$", ""); 

Jeśli chcesz tylko usunąć rzeczywiste przestrzenie (nie tabulacje ani nowych linii), wymienić \\s przez spację w re gex.

+3

Nie używałbym *, ale +. Bezużyteczny do zastąpienia 0 spacji;) – m0skit0

+0

'replaceFirst' również służy tutaj. –

+0

Nie ma za co! – kgautron

6
public static String replaceAtTheEnd(String input){ 
    input = input.replaceAll("\\s+$", ""); 
    return input; 
} 
+2

Nie używałbym *, ale +. Bezużyteczny do zastąpienia 0 spacji;) – m0skit0

+1

@ m0skit0 :) To był pierwszy +, potem edytuję do *, nie mam pojęcia dlaczego :). thx choć – Eugene

8
String s = " this has spaces at the beginning and at the end  "; 
    String result = s.replaceAll("\\s+$", ""); 
4

zrobiłbym to tak:

public static String trimEnd(String s) 
{ 
    if (s == null || s.length() == 0) 
     return s; 
    int i = s.length(); 
    while (i > 0 && Character.isWhitespace(s.charAt(i - 1))) 
     i--; 
    if (i == s.length()) 
     return s; 
    else 
     return s.substring(0, i); 
} 

To sposób bardziej gadatliwy niż za pomocą wyrażenia regularnego, ale to może być bardziej efektywne.

+0

Czy mogę poznać przyczynę upadłości? –

+0

Nie byłbym tak pewien co do wydajności (regexy mogą być kodowane w natywnym kodzie). I nie ma sensu odkrywać koła. Po co ręcznie kodować coś, co już możesz zrobić w bibliotekach? Możesz odkryć nowe koło tylko wtedy, gdy to, co jest dostępne, nie odpowiada ci (lub jest zbyt wolne). Optymalizuj później;) I faktycznie usunąłem argument: P – m0skit0

+0

Oczywiście jedynym sposobem, aby upewnić się co do wydajności, jest testowanie na sensownym zestawie danych. To znaczy, że regexp prawdopodobnie zapłaci za swoją ogólność: na przykład silniki regexp zwykle tłumaczą wyrażenia wejściowe pod kątem wydajności, co jest krokiem, którego moja wersja nie musi wykonać. Jeśli chodzi o biblioteki zewnętrzne, to zgadzam się z tobą, ale wciąż jest to kompromisem między utrzymaniem małego kawałka kodu i śledzeniem kolejnej zależności. Dlaczego, czasami po prostu zajmuje mniej czasu na samodzielne kodowanie i debugowanie, niż szukanie gotowego rozwiązania! –

Powiązane problemy