Java: eliminar el primer carácter de una cadena

215

En Java, tengo una cadena:

Jamaica

Me gustaría eliminar el primer carácter de la cadena y luego regresar amaica

¿Cómo haría esto?

Calibre2010
fuente

Respuestas:

341

Use la substring()función con un argumento de 1para obtener la subcadena desde la posición 1 ( después del primer carácter) hasta el final de la cadena (dejando el segundo argumento por defecto en toda la longitud de la cadena).

"Jamaica".substring(1);
moinudin
fuente
21
Es importante tener en cuenta que esto en realidad no elimina el carácter de la cadena: le proporciona una nueva cadena que tiene todos los caracteres de la cadena anterior, excepto la primera. No hay forma de modificar realmente una cadena.
Chris Dodd
Parece que el enlace ya no es válido. Pruebe el siguiente enlace en su lugar: substring (int)
Christian Hoffmann
1
Sí, si desea eliminar los primeros n caracteres de una variable de cadena, haga esto: variable = variable.substring (n);
Mitulát báti
67
public String removeFirstChar(String s){
   return s.substring(1);
}
Ahmed Kotb
fuente
12
Si va a definir una nueva función, al menos elija un nombre adecuado como removeFirst().
moinudin
55

Use substring()y proporcione el número de caracteres que desea recortar desde el frente.

String value = "Jamaica";
value = value.substring(1);

Respuesta: "amaica"

Thilina Gihan Priyankara
fuente
47

En Java, elimine el carácter principal solo si es un carácter determinado

Use el operador ternario de Java para verificar rápidamente si su personaje está allí antes de eliminarlo. Esto elimina el carácter principal solo si existe, si pasa una cadena en blanco, devuelve la cadena en blanco.

String header = "";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

header = "foobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

header = "#moobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

Huellas dactilares:

blankstring
foobar
moobar

Java, elimine todas las instancias de un personaje en cualquier parte de una cadena:

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

Java, elimine la primera instancia de un personaje en cualquier parte de una cadena:

String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"
Eric Leschinski
fuente
44
SECO:header = header.substring(header.startsWith("#") ? 1 : 0);
Aaron Blenkush el
3
O con header = header.replaceFirst("^#","");
expresiones
18

Puede usar el método de subcadena de la Stringclase que toma solo el índice inicial y devuelve la subcadena que comienza con el carácter en el índice especificado y se extiende hasta el final de la cadena.

String str = "Jamaica";
str = str.substring(1);
codictorio
fuente
11
public String removeFirst(String input)
{
    return input.substring(1);
}
Reese Moore
fuente
11

La clave para entender en Java es que las cadenas son inmutables, no puede cambiarlas. Por lo tanto, no tiene sentido hablar de 'eliminar un personaje de una cadena'. En su lugar, crea una NUEVA cadena con solo los caracteres que desea. Las otras publicaciones en esta pregunta le brindan una variedad de formas de hacerlo, pero es importante comprender que no cambian la cadena original de ninguna manera. Cualquier referencia que tenga a la cadena anterior continuará refiriéndose a la cadena anterior (a menos que las cambie para referirse a una cadena diferente) y no se verá afectada por la cadena recién creada.

Esto tiene una serie de implicaciones para el rendimiento. Cada vez que está 'modificando' una cadena, en realidad está creando una nueva cadena con toda la sobrecarga implícita (asignación de memoria y recolección de basura). Entonces, si desea realizar una serie de modificaciones en una cadena y solo se preocupa por el resultado final (las cadenas intermedias estarán muertas tan pronto como las 'modifique'), puede tener más sentido usar un StringBuilder o StringBuffer en su lugar.

Chris Dodd
fuente
9

puedes hacer así:

String str="Jamaica";
str=str.substring(1, title.length());
return str;

o en general:

public String removeFirstChar(String str){
   return str.substring(1, title.length());
}
eli am
fuente
8

El método substring () devuelve una nueva cadena que contiene una subsecuencia de caracteres actualmente contenidos en esta secuencia.

La subcadena comienza en el especificado starty se extiende al carácter en index end - 1.

Tiene dos formas. El primero es

  1. String substring(int FirstIndex)

Aquí, FirstIndex especifica el índice en el que comenzará la subcadena. Este formulario devuelve una copia de la subcadena que comienza en FirstIndex y se ejecuta hasta el final de la cadena de invocación.

  1. String substring(int FirstIndex, int endIndex)

Aquí, FirstIndex especifica el índice inicial y endIndex especifica el punto de detención. La cadena devuelta contiene todos los caracteres desde el índice inicial, hasta el índice final, pero sin incluirlo.

Ejemplo

    String str="Amiyo";
   // prints substring from index 3
   System.out.println("substring is = " + str.substring(3)); // Output "yo'
IntelliJ Amiya
fuente
4

Encontré una situación en la que tenía que eliminar no solo el primer personaje (si era un #, sino el primer conjunto de personajes).

String myString = ###Hello Worldpodría ser el punto de partida, pero solo me gustaría mantener el Hello World. Esto podría hacerse de la siguiente manera.

while (myString.charAt(0) == '#') { // Remove all the # chars in front of the real string
    myString = myString.substring(1, myString.length());
}

Para el caso de OP, reemplace whilecon ify funciona también.

Mathieu Brouwers
fuente
1
Habrá un problema si myString == "#" porque la cadena estará fuera de límites en algún momento. Para evitar esto, puede hacer (! MyString.isEmpty () && myString.charAt (0))
Christian
2

Otra solución, puede resolver su problema usando replaceAllalgunas expresiones regulares ^.{1}( demostración de expresiones regulares ), por ejemplo:

String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica
YCF_L
fuente
1

Mi versión de eliminar caracteres principales, uno o múltiples. Por ejemplo, String str1 = "01234", al eliminar el '0' inicial, el resultado será "1234". Para un String str2 = "000123" el resultado será nuevamente "123". Y para String str3 = "000" el resultado será una cadena vacía: "". Dicha funcionalidad suele ser útil al convertir cadenas numéricas en números. La ventaja de esta solución en comparación con regex (replaceAll (...)) es que esta es mucho más rápida. Esto es importante al procesar una gran cantidad de cadenas.

 public static String removeLeadingChar(String str, char ch) {
    int idx = 0;
    while ((idx < str.length()) && (str.charAt(idx) == ch))
        idx++;
    return str.substring(idx);
}
Andrushenko Alexander
fuente