2012-07-28 22 views
14

El ajuste de cadena Java no elimina un carácter de espacio en blanco para mí.El ajuste de cadena de Java no tiene efecto

String rank = (some method); 
System.out.println("(" + rank + ")"); 

La salida es (1 ). Observe el espacio a la derecha de 1.

Tengo que eliminar el espacio final de la cadena rank pero ni rank.trim() ni lo quitan.

La cadena rank sigue siendo la misma en ambos sentidos.

Editar: Código completo::

Document doc = Jsoup.connect("http://www.4icu.org/ca/").timeout(1000000).get(); 
Element table = doc.select("table").get(7); 
Elements rows = table.select("tr"); 
for (Element row: rows) { 
    String rank = row.select("span").first().text().trim(); 
    System.out.println("("+rank+")"); 
} 

¿Por qué no puedo eliminar ese espacio?

+3

¿Utiliza 'rank = rank.trim();' 'o simplemente rank.trim();'? El segundo no funcionará – Baz

+0

proporciona el código de recorte() que has usado .. –

+0

@Baz pregunta editada –

Respuesta

36

El código fuente de ese sitio web muestra el carácter especial html  . Intente buscar o reemplazar lo siguiente en su cadena java: \u00A0.

Ese es un espacio que no se puede romper. Ver: I have a string with "\u00a0", and I need to replace it with "" str_replace fails

rank = rank.replaceAll("\u00A0", ""); 

debería funcionar. Tal vez agregue un doble \\ en lugar del \.

+3

@TerryLi Vea, si proporciona suficiente información, podemos ayudarlo. Me alegro de poder ayudar :) – Baz

+0

@Baz ¡Gracias, funciona! – dogankadriye

+0

Merece la pena señalar esta respuesta: http://stackoverflow.com/questions/1437933/how-to-properly-trim-whitespaces-from-a-string-in-java – Quaternion

3

¿Está asignando el String?

String rank = " blabla "; 
rank = rank.trim(); 

No olvide la segunda tarea, o su cuerda recortada no irá a ninguna parte.

Usted puede mirar este tipo de cosas en la API, así: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#trim()

Como se puede ver este método devuelve una cadena, como la mayoría de los métodos que operan sobre una cadena hacerlo. Devuelven la Cadena modificada y dejan la Cadena original intacta.

+0

pregunta editada –

7

Debe asignar el resultado de recortar a la variable String. De lo contrario, no va a funcionar, porque las cadenas en Java son inmutables.

String orig = " quick brown fox "; 
String trimmed = original.trim(); 
+0

pregunta editada –

0

La función Trim devuelve una nueva copia de la cadena, con los espacios en blanco inicial y final omitidos.

rank = rank.trim();// This will remove and save rank without leading and trailing spaces 

dará el resultado que desee.

Reemplazar método no funcionará si pasa cadena vacía para el reemplazo.

+0

pregunta editada –

+1

Si no está seguro de los espacios le sugiero que use regex para extraer el número. Use "((- | \\ +)? [0-9] + (\\. [0-9] +)?) +" Regex extraerá el número de la cadena. –

+0

Te guiaré. Pero todavía me pregunto qué denotan los dos espacios. –

0

Dado que las cadenas en java son inmutables, es decir, no se pueden cambiar. Debe reasignarlo a una cadena temporal. Y luego usando esa cadena puedes convertirla en int.

String temp=rank.trim() 
int te= Integer.parseInt(temp) 
+0

No tiene que usar una cadena temporal. Puede usar 'rank = rank.trim();' ... – Baz

+0

pregunta editada –

3

El carácter es un espacio sin interrupciones y, por lo tanto, no se elimina con el método trim().Itere a través de los caracteres e imprima el valor int de cada uno, para saber qué personaje debe reemplazar por una cadena vacía para obtener lo que desea.

1

Tuve el mismo problema e hice poca manipulación en el método de recorte de Java().
Usted puede utilizar este código para recortar:

public static String trimAdvanced(String value) { 

     Objects.requireNonNull(value); 

     int strLength = value.length(); 
     int len = value.length(); 
     int st = 0; 
     char[] val = value.toCharArray(); 

     if (strLength == 0) { 
      return ""; 
     } 

     while ((st < len) && (val[st] <= ' ') || (val[st] == '\u00A0')) { 
      st++; 
      if (st == strLength) { 
       break; 
      } 
     } 
     while ((st < len) && (val[len - 1] <= ' ') || (val[len - 1] == '\u00A0')) { 
      len--; 
      if (len == 0) { 
       break; 
      } 
     } 


     return (st > len) ? "" : ((st > 0) || (len < strLength)) ? value.substring(st, len) : value; 
    } 
Cuestiones relacionadas