Eliminar parte de la cadena en Java

81

Quiero eliminar una parte de la cadena de un carácter, es decir:

Cadena de origen:

manchester united (with nice players)

Cadena de destino:

manchester united
zmki
fuente
5
¿Cómo sabe qué parte conservar y qué parte descartar? Sin saber eso, ¿es imposible responder a tu pregunta?
Raedwald

Respuestas:

156

Hay varias formas de hacerlo. Si tiene la cadena que desea reemplazar, puede usar los métodos replaceo replaceAllde la Stringclase. Si está buscando reemplazar una subcadena, puede obtener la subcadena usando la substringAPI.

Por ejemplo

String str = "manchester united (with nice players)";
System.out.println(str.replace("(with nice players)", ""));
int index = str.indexOf("(");
System.out.println(str.substring(0, index));

Para reemplazar el contenido dentro de "()" puede usar:

int startIndex = str.indexOf("(");
int endIndex = str.indexOf(")");
String replacement = "I AM JUST A REPLACEMENT";
String toBeReplaced = str.substring(startIndex + 1, endIndex);
System.out.println(str.replace(toBeReplaced, replacement));
mprabhat
fuente
algún error tipográfico. debería serString toBeReplaced = str.substring(startIndex , endIndex + 1);
Yeung
también valdría la pena eliminar el espacio: System.out.println (str.replace ("(con buenos jugadores)", ""));
kiedysktos
32

Reemplazo de cadena

String s = "manchester united (with nice players)";
s = s.replace(" (with nice players)", "");

Editar:

Por índice

s = s.substring(0, s.indexOf("(") - 1);
Shawn Janas
fuente
3
no lo olvidess = s.replace(...)
Sergey Kalinichenko
No puede ser, porque lo que está entre paréntesis puede cambiar. Necesito cambiar la cadena del carácter (
zmki
19

Utilice String.Replace ():

http://www.daniweb.com/software-development/java/threads/73139

Ejemplo:

String original = "manchester united (with nice players)";
String newString = original.replace(" (with nice players)","");
Matt Cashatt
fuente
No fui el votante negativo, pero ¿quizás porque pusiste Reemplazar en el caso equivocado?
Mike Kwan
1
Voto a favor para negar el efecto de un voto en contra (es decir, inexplicable y aparentemente engañoso).
Gayot Fow
No es necesario que la cadena sea la misma que en el ejemplo dado. Por lo tanto, no puede usar reemplazar.
Confundir
Aquí hay una comparación de rendimiento, el método de reemplazo de cadenas utiliza una expresión regular bajo el capó. stackoverflow.com/questions/16228992/…
Igor Vuković
7

Usando StringBuilder , puede reemplazar de la siguiente manera.

StringBuilder str = new StringBuilder("manchester united (with nice players)");
int startIdx = str.indexOf("(");
int endIdx = str.indexOf(")");
str.replace(++startIdx, endIdx, "");

fuente
6

Primero dividiría la cadena original en una matriz de Cadena con un token "(" y la Cadena en la posición 0 de la matriz de salida es lo que le gustaría tener.

String[] output = originalString.split(" (");

String result = output[0];
Nicolás Epaminonda
fuente
5

Debe utilizar el método substring () del objeto String.

Aquí hay un código de ejemplo:

Supuesto: estoy asumiendo aquí que desea recuperar la cadena hasta el primer paréntesis

String strTest = "manchester united(with nice players)";
/*Get the substring from the original string, with starting index 0, and ending index as position of th first parenthesis - 1 */
String strSub = strTest.subString(0,strTest.getIndex("(")-1);
Gopal Nair
fuente
2

Usando StringUtils de commons lang

Una cadena de origen nula devolverá nulo. Una cadena de origen vacía ("") devolverá la cadena vacía. Una cadena de eliminación nula devolverá la cadena de origen. Una cadena de eliminación vacía ("") devolverá la cadena de origen.

String str = StringUtils.remove("Test remove", "remove");
System.out.println(str);
//result will be "Test"
Igor Vuković
fuente
1
// Java program to remove a substring from a string
public class RemoveSubString {

    public static void main(String[] args) {
        String master = "1,2,3,4,5";
        String to_remove="3,";

        String new_string = master.replace(to_remove, "");
        // the above line replaces the t_remove string with blank string in master

        System.out.println(master);
        System.out.println(new_string);

    }
}
KIBOU Hassan
fuente
1

Si solo necesita eliminar todo después de "(", intente esto. No hace nada si no hay paréntesis.

StringUtils.substringBefore(str, "(");

Si puede haber contenido después del paréntesis final, intente esto.

String toRemove = StringUtils.substringBetween(str, "(", ")");
String result = StringUtils.remove(str, "(" + toRemove + ")"); 

Para eliminar los espacios finales, use str.trim()

Las funciones de Apache StringUtils son nulas, vacías y no son seguras para las coincidencias

Gibolt
fuente
¡¡Buena solución!!
Sumit Shukla
0

Podrías usar replacepara arreglar tu cuerda. Lo siguiente devolverá todo antes de un "(" y también eliminará todos los espacios en blanco iniciales y finales. Si la cadena comienza con un "(", simplemente lo dejará como está.

str = "manchester united (with nice players)"
matched = str.match(/.*(?=\()/)
str.replace(matched[0].strip) if matched
slindsey3000
fuente
Esto no parece funcionar en Java. Podría ser un derivado de ECMAscript. ¿Tiene algún método para hacer que este código funcione como está en Java?
1111161171159459134
0

Solución de Kotlin

Si está eliminando una cadena específica del final, use removeSuffix ( Documentación )

var text = "one(two"
text = text.removeSuffix("(two") // "one"

Si el sufijo no existe en la cadena, solo devuelve el original

var text = "one(three"
text = text.removeSuffix("(two") // "one(three"

Si desea eliminar después de un carácter, use

// Each results in "one"

text = text.replaceAfter("(", "").dropLast(1) // You should check char is present before `dropLast`
// or
text = text.removeRange(text.indexOf("("), text.length)
// or
text = text.replaceRange(text.indexOf("("), text.length, "")

También puede comprobar hacia fuera removePrefix, removeRange, removeSurrounding, y replaceAfterLastque son similares

La lista completa está aquí: ( Documentación )

Gibolt
fuente