Cómo eliminar un solo carácter de una cadena

Para acceder a caracteres individuales de una cadena en Java, tenemos String.charAt(2) . ¿Hay alguna función incorporada para eliminar un carácter individual de una cadena en Java?

Algo como esto:

 if(String.charAt(1) == String.charAt(2){ //I want to remove the individual character at index 2. } 

También puede usar la clase StringBuilder que es mutable.

 StringBuilder sb = new StringBuilder(inputString); 

Tiene el método deleteCharAt() , junto con muchos otros métodos de mutador.

Simplemente elimine los caracteres que necesita eliminar y luego obtenga el resultado de la siguiente manera:

 String resultString = sb.toString(); 

Esto evita la creación de objetos de cadena innecesarios.

Una posibilidad:

 String result = str.substring(0, index) + str.substring(index+1); 

Tenga en cuenta que el resultado es un nuevo String (así como dos objetos String intermedios), porque las cadenas en Java son inmutables.

Puede utilizar el método Java String llamado replace, que reemplazará todos los caracteres que coincidan con el primer parámetro con el segundo parámetro:

 String a = "Cool"; a = a.replace("o",""); //variable 'a' contains the string "Cl" 

No, porque las cadenas en Java son inmutables. Deberá crear una nueva cadena eliminando el carácter que no desea.

Para reemplazar un solo carácter en la posición de índice idx en cadena str , haga algo como esto y recuerde que se creará una nueva cadena:

 String newstr = str.substring(0, idx) + str.substring(idx + 1); 
 String str = "M1y java8 Progr5am"; 

deleteCharAt ()

 StringBuilder bulid = new StringBuilder(str); bulid.deleteCharAt(1); // Shift the positions front. bulid.deleteCharAt(8-1); bulid.deleteCharAt(15-2); System.out.println("Builder : "+bulid); 

reemplazar()

 StringBuffer buffer = new StringBuffer(str); buffer.replace(1, 2, ""); // Shift the positions front. buffer.replace(7, 8, ""); buffer.replace(13, 14, ""); System.out.println("Buffer : "+buffer); 

carbonizarse[]

 char[] c = str.toCharArray(); String new_Str = ""; for (int i = 0; i < c.length; i++) { if (!(i == 1 || i == 8 || i == 15)) new_Str += c[i]; } System.out.println("Char Array : "+new_Str); 

Considera el siguiente código:

 public String removeChar(String str, Integer n) { String front = str.substring(0, n); String back = str.substring(n+1, str.length()); return front + back; } 

También puede usar la (enorme) máquina de expresiones regulares.

 inputString = inputString.replaceFirst("(?s)(.{2}).(.*)", "$1$2"); 
  • "(?s)" - le dice a regexp que maneje las nuevas líneas como los caracteres normales (por si acaso).
  • "(.{2})" - grupo $ 1 que recostack exactamente 2 caracteres
  • "." - "." - cualquier personaje en el índice 2 (para ser expulsado).
  • "(.*)" - grupo $ 2 que recoge el rest de inputString.
  • "$1$2" - poniendo el grupo $ 1 y el grupo $ 2 juntos.

Use la función replaceFirst de la clase String. Hay tantas variantes de función de reemplazo que puede usar.

Si necesita algún control lógico sobre la eliminación de caracteres, use esto

 String string = "sdsdsd"; char[] arr = string.toCharArray(); // Run loop or whatever you need String ss = new String(arr); 

Si no necesita dicho control, puede usar lo que Oscar orBhesh mencionó. Ellos son acertados.

Mediante el uso del método de reemplazo podemos cambiar el carácter individual de la cadena.

 string= string.replace("*", ""); 

La forma más fácil de eliminar un char de la cadena

 String str="welcome"; str=str.replaceFirst(String.valueOf(str.charAt(2)),"");//'l' will replace with "" System.out.println(str);//output: wecome 
 public class RemoveCharFromString { public static void main(String[] args) { String output = remove("Hello", 'l'); System.out.println(output); } private static String remove(String input, char c) { if (input == null || input.length() < = 1) return input; char[] inputArray = input.toCharArray(); char[] outputArray = new char[inputArray.length]; int outputArrayIndex = 0; for (int i = 0; i < inputArray.length; i++) { char p = inputArray[i]; if (p != c) { outputArray[outputArrayIndex] = p; outputArrayIndex++; } } return new String(outputArray, 0, outputArrayIndex); } } 
 public static String removechar(String fromString, Character character) { int indexOf = fromString.indexOf(character); if(indexOf==-1) return fromString; String front = fromString.substring(0, indexOf); String back = fromString.substring(indexOf+1, fromString.length()); return front+back; } 
  BufferedReader input=new BufferedReader(new InputStreamReader(System.in)); String line1=input.readLine(); String line2=input.readLine(); char[] a=line2.toCharArray(); char[] b=line1.toCharArray(); loop: for(int t=0;t 

En la mayoría de los casos de uso, usar StringBuilder o substring es un buen enfoque (como ya se respondió). Sin embargo, para el código de rendimiento crítico, esta podría ser una buena alternativa.

 /** * Delete a single character from index position 'start' from the 'target' String. * * ```` * deleteAt("ABC", 0) -> "BC" * deleteAt("ABC", 1) -> "B" * deleteAt("ABC", 2) -> "C" * ```` */ public static String deleteAt(final String target, final int start) { return deleteAt(target, start, start + 1); } /** * Delete the characters from index position 'start' to 'end' from the 'target' String. * * ```` * deleteAt("ABC", 0, 1) -> "BC" * deleteAt("ABC", 0, 2) -> "C" * deleteAt("ABC", 1, 3) -> "A" * ```` */ public static String deleteAt(final String target, final int start, int end) { final int targetLen = target.length(); if (start < 0) { throw new IllegalArgumentException("start=" + start); } if (end > targetLen || end < start) { throw new IllegalArgumentException("end=" + end); } if (start == 0) { return end == targetLen ? "" : target.substring(end); } else if (end == targetLen) { return target.substring(0, start); } final char[] buffer = new char[targetLen - end + start]; target.getChars(0, start, buffer, 0); target.getChars(end, targetLen, buffer, start); return new String(buffer); } 

* Puede eliminar el valor de cadena use StringBuilder y deletecharAt.

 String s1 = "aabc"; StringBuilder sb = new StringBuilder(s1); for(int i=0;i 

Cuando tengo este tipo de preguntas, siempre pregunto: “¿qué harían los Java Gurus?” 🙂

Y respondería eso, en este caso, mirando la implementación de String.trim() .

Aquí hay una extrapolación de esa implementación que permite el uso de más caracteres de corte.

Sin embargo, tenga en cuenta que el ajuste original en realidad elimina todos los caracteres que son < = ' ' , por lo que puede tener que combinar esto con el original para obtener el resultado deseado.

 String trim(String string, String toTrim) { // input checks removed if (toTrim.length() == 0) return string; final char[] trimChars = toTrim.toCharArray(); Arrays.sort(trimChars); int start = 0; int end = string.length(); while (start < end && Arrays.binarySearch(trimChars, string.charAt(start)) >= 0) start++; while (start < end && Arrays.binarySearch(trimChars, string.charAt(end - 1)) >= 0) end--; return string.substring(start, end); } 

Sí. Tenemos una función incorporada para eliminar un carácter individual de una cadena en java, es decir, deleteCharAt

Por ejemplo,

 public class StringBuilderExample { public static void main(String[] args) { StringBuilder sb = new StringBuilder("helloworld"); System.out.println("Before : " + sb); sb = sb.deleteCharAt(3); System.out.println("After : " + sb); } } 

Salida

 Before : helloworld After : heloworld 
 public String missingChar(String str, int n) { String front = str.substring(0, n); // Start this substring at n+1 to omit the char. // Can also be shortened to just str.substring(n+1) // which goes through the end of the string. String back = str.substring(n+1, str.length()); return front + back; } 

Por ejemplo, si desea calcular cuántos A hay en la Cadena, puede hacerlo así:

 if (string.contains("a")) { numberOf_a++; string = string.replaceFirst("a", ""); }