manejo - Manera correcta de recortar una cadena en Java
funciones string java (8)
Como las cadenas en Java son objetos inmutables , no hay forma de ejecutar el recorte en el lugar. Lo único que puede hacer para recortar la cadena es crear una nueva versión recortada de la cadena y devolverla (y esto es lo que hace el método trim()
).
En Java, estoy haciendo esto para recortar una cadena:
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.trim();
System.out.println("after->>"+input+"<<-");
La salida es:
before->> some Thing <<-
after->>some Thing<<-
Trabajos. Pero me pregunto si al asignarme una variable a mí misma, estoy haciendo lo correcto. No quiero desperdiciar recursos creando otra variable y asignándole el valor recortado. Me gustaría realizar el ajuste en el lugar.
Entonces, ¿estoy haciendo esto bien?
El enfoque tradicional es utilizar el método de recorte en línea ... por ejemplo:
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
System.out.println("after->>"+input.trim()+"<<-");
Si es una cuerda que debe recortarse para todos los usos, recórtela por adelantado como lo ha hecho. Reutilizar la misma ubicación de memoria que ha hecho no es una mala idea, si desea comunicar su intención a otros desarrolladores. Al escribir en Java, la gestión de la memoria no es un tema clave, ya que el "regalo" de Java es que no es necesario que lo administres.
En teoría no te estás asignando una variable. Está asignando el valor devuelto del método trim () a su entrada de variable.
En la práctica, la implementación del método trim () se optimiza para que esté creando (y devolviendo) otra variable solo cuando sea necesario. En otros casos (cuando en realidad no hay necesidad de recortar) está devolviendo una referencia a la cadena original (en este caso, en realidad, se está asignando una variable).
De todos modos, trim () no modifica la cadena original, por lo que esta es la forma correcta de usarla.
Este fragmento de código que hice hace mucho tiempo atrás, que toma una matriz de caracteres como parámetro y devuelve una cadena. Sin embargo, se requieren pocas modificaciones para las puntuaciones, aunque con valores ascii. Podría ser de alguna ayuda.
public static String trim(char [] input){
char [] output = new char [input.length];
int j=0;
int jj=0;
if(input[0] == '' '' ) {
while(input[jj] == '' '')
jj++;
}
for(int i=jj; i<input.length; i++){
if(input[i] !='' '' || ( i==(input.length-1) && input[input.length-1] == '' '')){
output[j]=input[i];
j++;
}
else if (input[i+1]!='' ''){
output[j]='' '';
j++;
}
}
char [] m = new char [j];
int a=0;
for(int i=0; i<m.length; i++){
m[i]=output[a];
a++;
}
return new String (m);
}
Sí, pero todavía habrá dos objetos hasta que el recolector de basura elimine el valor original al que apuntaba la entrada. Las cuerdas en Java son inmutables. Aquí hay una buena explicación: Inmutabilidad de las cuerdas en Java .
Si tenemos que recortar una cadena sin usar métodos trim (), split () de Java, el siguiente código fuente puede ser útil.
static String allTrim(String str)
{
int j = 0;
int count = 0; // Number of extra spaces
int lspaces = 0;// Number of left spaces
char ch[] = str.toCharArray();
int len = str.length();
StringBuffer bchar = new StringBuffer();
if(ch[0] == '' '')
{
while(ch[j] == '' '')
{
lspaces++;
j++;
}
}
for(int i = lspaces; i < len; i++)
{
if(ch[i] != '' '')
{
if(count > 1 || count == 1)
{
bchar.append('' '');
count = 0;
}
bchar.append(ch[i]);
}
else if(ch[i] == '' '')
{
count++;
}
}
return bchar.toString();
}
Usted lo está haciendo bien. De la documentación :
Las cuerdas son constantes; sus valores no se pueden cambiar después de que se crean. Los búferes de cadena admiten cadenas mutables. Debido a que los objetos String son inmutables, se pueden compartir.
También a partir de la documentation :
recortar
ajuste de cadena pública ()
Devuelve una copia de la cadena, con espacios en blanco iniciales y finales omitidos. Si este objeto String representa una secuencia de caracteres vacía, o si el primer y último carácter de la secuencia de caracteres representada por este objeto String tienen códigos mayores que ''/ u0020'' (el carácter de espacio), se devuelve una referencia a este objeto String.
De lo contrario, si no hay ningún carácter con un código mayor que ''/ u0020'' en la cadena, se crea y se devuelve un nuevo objeto String que representa una cadena vacía.
De lo contrario, sea k el índice del primer carácter en la cadena cuyo código sea mayor que ''/ u0020'', y sea m el índice del último carácter en la cadena cuyo código sea mayor que ''/ u0020''. Se crea un nuevo objeto String, que representa la subcadena de esta cadena que comienza con el carácter en el índice k y termina con el carácter en el índice m, es decir, el resultado de this.substring (k, m + 1).
Este método se puede usar para recortar espacios en blanco (como se definió anteriormente) desde el principio y el final de una cadena.
Devoluciones :
Una copia de esta cadena con espacios en blanco iniciales y finales eliminados, o esta cadena si no tiene espacios en blanco iniciales o finales.
El método java string trim () elimina los espacios iniciales y finales.
public class StringTrimExample{
public static void main(String args[]){
String s1=" hello string ";
System.out.println(s1+"javatpoint");//without trim()
System.out.println(s1.trim()+"javatpoint");//with trim()
}}
salida
hello string javatpoint
hello stringjavatpoint