Cómo reemplazar la primera aparición de cadena en Java

4 minutos de lectura

Avatar de usuario de Jagadeesh
Jagadeesh

Quiero reemplazar la primera aparición de String en lo siguiente.

  String test = "see Comments, this is for some test, help us"

**Si la prueba contiene la entrada de la siguiente manera, no debe reemplazar

  1. Ver Comentarios, (con espacio al final)
  2. Ver comentarios,
  3. Ver comentarios**

Quiero obtener la salida de la siguiente manera,

 Output: this is for some test, help us

Gracias por adelantado,

  • ¿Qué has probado?

    – usuario1329572

    5 de junio de 2012 a las 12:40

  • Puede buscar en Google directamente su pregunta, o mover la vista un poco hacia la derecha de este comentario y consultar las preguntas RELACIONADAS…

    – hovanessyán

    5 de junio de 2012 a las 12:42

  • O puede consultar la documentación de String y encontrar replaceFirst()

    – brimborio

    5 de junio de 2012 a las 12:46


  • Google le dirá cómo reemplazar la primera aparición de un REGEX, no una cadena.

    – Sridhar Sarnobat

    11 de septiembre de 2016 a las 4:14

Avatar de usuario de Asif
Como si

Puedes usar replaceFirst(String regex, String replacement) método de cadena.

  • Esto es para REGEX no, Strings.

    – Sridhar Sarnobat

    26 de septiembre de 2016 a las 2:59

  • @ Sridhar-Sarnobat, esto se entiende por los parámetros que he mencionado en la Respuesta, ¿supongo? Y así es como se supone que debe usarse. .

    – Como si

    5 oct 2016 a las 20:36

  • Esto podría ser para expresiones regulares, pero funcionará incluso si proporciona una cadena en lugar de una expresión regular acumulada. Acabo de probar. Entonces, la discusión anterior confunde a las personas que ven esto. La respuesta es perfecta.

    – Rey de la esperanza

    8 de octubre de 2017 a las 8:46

  • ¿Qué sucede si está tratando de reemplazar una cadena que contiene -?

    – Sridhar Sarnobat

    19 de diciembre de 2017 a las 19:22

  • @Sridhar-Sarnobat cuando la cadena de búsqueda contiene caracteres de patrón que se supone que no deben interpretarse, puede filtrar la cadena a través de Pattern.quote(…) primero. Sin embargo, podría ser más eficiente usar Pattern.compile(searchString, Pattern.LITERAL).matcher(input) .replaceAll(replacement) después…

    – Holger

    12 de febrero de 2018 a las 15:29


Avatar de usuario de Sridhar Sarnobat
Sridhar Sarnobat

Debe usar bibliotecas ya probadas y bien documentadas en favor de escribir su propio código.

org.apache.commons.lang3.
  StringUtils.replaceOnce("coast-to-coast", "coast", "") = "-to-coast"

Javadoc

Incluso hay una versión que no distingue entre mayúsculas y minúsculas (lo cual es bueno).

Experto

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.7</version>
</dependency>

Créditos

Mi respuesta es un aumento de: https://stackoverflow.com/a/10861856/714112

  • Aprecio tu respuesta, pero porque replaceFirst en la clase String es para expresiones regulares. Pero solo por un simple reemplazo de cadena, tengo que introducir una nueva biblioteca en mi proyecto. no vale..alguna alternativa?

    – aturdidor

    16 de junio de 2020 a las 2:32

  • Sí, es cierto, las bibliotecas vinculadas dinámicamente son un fastidio. Simplemente puede copiar y pegar el código fuente de la biblioteca.

    – Sridhar Sarnobat

    31 de mayo de 2021 a las 17:26

Avatar de usuario de Hari Krishna
Hari Krsna

Puede usar la siguiente declaración para reemplazar la primera aparición de una cadena literal con otra cadena literal:

String result = input.replaceFirst(Pattern.quote(search), Matcher.quoteReplacement(replace));

Sin embargo, esto hace mucho trabajo en segundo plano que no sería necesario con una función dedicada para reemplazar cadenas literales.

  • Esta es la mejor respuesta, porque también maneja caracteres regex y no depende de bibliotecas externas.

    – Andrea

    3 de agosto de 2018 a las 12:21


  • Desafortunadamente no funciona, prueba esto: "I want to earn in euro!".replaceFirst(Pattern.quote("euro"), "$");

    –Filip Stachowiak

    17 de febrero de 2020 a las 15:36


  • @FilipStachowiak lo arregló.

    – Socowi

    19 de mayo de 2020 a las 14:18

Avatar de usuario de Eng.Fouad
Ing. Fouad

Usar substring(int beginIndex):

String test = "see Comments, this is for some test, help us";
String newString = test.substring(test.indexOf(",") + 2);
System.out.println(newString);

PRODUCCIÓN:

esto es para una prueba, ayúdanos

Puede utilizar el siguiente método.

public static String replaceFirstOccurrenceOfString(String inputString, String stringToReplace,
        String stringToReplaceWith) {

    int length = stringToReplace.length();
    int inputLength = inputString.length();

    int startingIndexofTheStringToReplace = inputString.indexOf(stringToReplace);

    String finalString = inputString.substring(0, startingIndexofTheStringToReplace) + stringToReplaceWith
            + inputString.substring(startingIndexofTheStringToReplace + length, inputLength);

    return finalString;

}

Siguiendo Enlace proporcione ejemplos para reemplazar la primera aparición de una cadena usando con y sin expresiones regulares.

Avatar de usuario de Thomas Boyles
thomas boyles

Use String replaceFirst para cambiar la primera instancia del delimitador a algo único:

String input = "this=that=theother"
String[] arr = input.replaceFirst("=", "==").split('==',-1);
String key = arr[0];
String value = arr[1];
System.out.println(key + " = " + value);

También puede usar este método en node.js;

public static String replaceFirstOccurance(String str, String chr, String replacement){
    String[] temp = str.split(chr, 2);
    return temp[0] + replacement + temp[1];
}

  • eso no funciona split funciona en regex-es.

    – Erik Pragt

    4 de enero a las 11:22

¿Ha sido útil esta solución?