una espacios eliminar detectar cadena blanco java regex string replace

eliminar - detectar espacios en blanco java



Java cómo reemplazar 2 o más espacios con un solo espacio en la cadena y eliminar los espacios iniciales y finales (17)

Buscando una forma rápida y sencilla en Java para cambiar esta cadena

" hello there "

a algo que se parece a esto

"hello there"

donde reemplacé todos esos espacios múltiples con un solo espacio, excepto que también quiero que se vayan uno o más espacios al principio de la cadena.

Algo como esto me lleva en parte allí.

String mytext = " hello there "; mytext = mytext.replaceAll("( )+", " ");

pero no del todo.


recortar()

Elimina solo los espacios iniciales y finales.

Desde Java Doc, "Devuelve una cadena cuyo valor es esta cadena, con cualquier espacio en blanco inicial y final eliminado".

System.out.println(" D ev Dum my ".trim());

"D ev Dum my"

replace (), replaceAll ()

Reemplaza todas las cadenas vacías en la palabra,

System.out.println(" D ev Dum my ".replace(" ","")); System.out.println(" D ev Dum my ".replaceAll(" ","")); System.out.println(" D ev Dum my ".replaceAll("//s+",""));

Salida:

"DevDummy" "DevDummy" "DevDummy"

Nota: "/ s +" es la expresión regular similar al carácter de espacio vacío.

Referencia: https://www.codedjava.com/2018/06/replace-all-spaces-in-string-trim.html


Esto funcionó perfectamente para mí: sValue = sValue.trim().replaceAll("//s+", " ");


Esto funciono para mi

scan= filter(scan, " [//s]+", " "); scan= sac.trim();

donde el filtro sigue la función y el escaneo es la cadena de entrada:

public String filter(String scan, String regex, String replace) { StringBuffer sb = new StringBuffer(); Pattern pt = Pattern.compile(regex); Matcher m = pt.matcher(scan); while (m.find()) { m.appendReplacement(sb, replace); } m.appendTail(sb); return sb.toString(); }


Mi método antes de encontrar la segunda respuesta usando expresiones regulares como una mejor solución. Tal vez alguien necesita este código.

private String replaceMultipleSpacesFromString(String s){ if(s.length() == 0 ) return ""; int timesSpace = 0; String res = ""; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if(c == '' ''){ timesSpace++; if(timesSpace < 2) res += c; }else{ res += c; timesSpace = 0; } } return res.trim(); }


Para eliminar espacios al principio y al final de la Cadena, use String#trim() método String#trim() . Y luego use su mytext.replaceAll("( )+", " ") .


Podrías usar lookarounds también.

test.replaceAll("^ +| +$|(?<= ) ", "");

O

test.replaceAll("^ +| +$| (?= )", "")

<space>(?= ) coincide con un carácter de espacio seguido de otro carácter de espacio. Entonces, en espacios consecutivos, coincidiría con todos los espacios excepto el último porque no está seguido de un carácter de espacio. Esto le deja un espacio único para espacios consecutivos después de la operación de eliminación.

Ejemplo:

String[] tests = { " x ", // [x] " 1 2 3 ", // [1 2 3] "", // [] " ", // [] }; for (String test : tests) { System.out.format("[%s]%n", test.replaceAll("^ +| +$| (?= )", "") ); }


Primero puede usar String.trim() , y luego aplicar el comando regex replace en el resultado.


Prueba este.

Código de muestra

String str = " hello there "; System.out.println(str.replaceAll("( +)"," ").trim());

SALIDA

hello there

Primero reemplazará todos los espacios con un solo espacio. Lo que se supone que tenemos que hacer es recortar la String porque el Inicio de la String y el Fin de la String reemplazará todo el espacio con un solo espacio si la String tiene espacios en el Inicio de la String y el Fin de la String Por lo tanto, necesitamos recortarlos. Que obtienes tu String deseada.


Prueba esto:

String after = before.trim().replaceAll(" +", " ");

Ver también

No trim() regex

También es posible hacer esto con un solo replaceAll , pero es mucho menos legible que la solución trim() . No obstante, se proporciona aquí solo para mostrar lo que puede hacer regex:

String[] tests = { " x ", // [x] " 1 2 3 ", // [1 2 3] "", // [] " ", // [] }; for (String test : tests) { System.out.format("[%s]%n", test.replaceAll("^ +| +$|( )+", "$1") ); }

Hay 3 suplentes:

  • ^_+ : cualquier secuencia de espacios al principio de la cadena
    • Combina y reemplaza con $1 , que captura la cadena vacía
  • _+$ : cualquier secuencia de espacios al final de la cadena
    • Combina y reemplaza con $1 , que captura la cadena vacía
  • (_)+ : cualquier secuencia de espacios que no coincida con ninguno de los anteriores, lo que significa que está en el medio
    • Combina y reemplaza con $1 , que captura un solo espacio

Ver también


Solo necesitas un

replaceAll("//s{2,}", " ").trim();

donde se combinan uno o más espacios y se reemplazan con un solo espacio y luego se recortan los espacios en blanco al principio y al final (en realidad se puede invertir primero recortando y luego haciendo coincidir para hacer que la expresión regular sea más rápida según lo señalado por alguien).

Para probar esto rápidamente intente:

System.out.println(new String(" hello there ").trim().replaceAll("//s{2,}", " "));

y volverá:

"hello there"


Utilice el método StringUtils.normalizeSpace(String str) Apache commons. Ver docs aqui


Ver String.replaceAll .

Utilice la expresión regular "/s" y sustitúyala por " " .

A continuación, utilice String.trim .


Mira esto...

public static void main(String[] args) { String s = "A B C D E F G/tH I/rJ/nK/tL"; System.out.println("Current : "+s); System.out.println("Single Space : "+singleSpace(s)); System.out.println("Space count : "+spaceCount(s)); System.out.format("Replace all = %s", s.replaceAll("//s+", "")); // Example where it uses the most. String s = "My name is yashwanth . M"; String s2 = "My nameis yashwanth.M"; System.out.println("Normal : "+s.equals(s2)); System.out.println("Replace : "+s.replaceAll("//s+", "").equals(s2.replaceAll("//s+", ""))); }

Si String contiene solo un espacio, replace () no se reemplazará,

Si los espacios son más de uno, la acción Reemplazar () realiza y elimina el espacio.

public static String singleSpace(String str){ return str.replaceAll(" +| +|/t|/r|/n",""); }

Para contar el número de espacios en una cadena.

public static String spaceCount(String str){ int i = 0; while(str.indexOf(" ") > -1){ //str = str.replaceFirst(" ", ""+(i++)); str = str.replaceFirst(Pattern.quote(" "), ""+(i++)); } return str; }

Pattern .quote ("?") Devuelve una cadena de patrón literal.


Por favor use el siguiente código

package com.myjava.string; import java.util.StringTokenizer; public class MyStrRemoveMultSpaces { public static void main(String a[]){ String str = "String With Multiple Spaces"; StringTokenizer st = new StringTokenizer(str, " "); StringBuffer sb = new StringBuffer(); while(st.hasMoreElements()){ sb.append(st.nextElement()).append(" "); } System.out.println(sb.toString().trim()); } }


"[ ]{2,}"

Esto coincidirá con más de un espacio.

String mytext = " hello there "; mytext = mytext.trim().replaceAll("[ ]{2,}", " "); System.out.println(mytext);

SALIDA:

hello there


String str = " hello world"

reducir espacios primero

str = str.trim().replaceAll(" +", " ");

mayúscula la primera letra y en minúscula todo lo demás

str = str.substring(0,1).toUpperCase() +str.substring(1,str.length()).toLowerCase();


public class RemoveExtraSpacesEfficient { public static void main(String[] args) { String s = "my name is mr space "; char[] charArray = s.toCharArray(); char prev = s.charAt(0); for (int i = 0; i < charArray.length; i++) { char cur = charArray[i]; if (cur == '' '' && prev == '' '') { } else { System.out.print(cur); } prev = cur; } } }

La solución anterior es el algoritmo con la complejidad de O (n) sin utilizar ninguna función java.