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
-
String.trim()
- Devuelve una copia de la cadena, con espacios en blanco iniciales y finales omitidos.
- regular-expressions.info/Repetition
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
- Combina y reemplaza con
-
_+$
: cualquier secuencia de espacios al final de la cadena- Combina y reemplaza con
$1
, que captura la cadena vacía
- Combina y reemplaza con
-
(_)+
: 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
- Combina y reemplaza con
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.