Java - suppression du premier caractère d'une chaîne

215

En Java, j'ai une chaîne:

Jamaica

Je voudrais supprimer le premier caractère de la chaîne puis revenir amaica

Comment pourrais-je faire ça?

Calibre2010
la source

Réponses:

343

Utilisez la substring()fonction avec un argument de 1pour obtenir la sous-chaîne de la position 1 ( après le premier caractère) à la fin de la chaîne (en laissant le deuxième argument par défaut sur toute la longueur de la chaîne).

"Jamaica".substring(1);
moinudin
la source
21
Il est important de noter que cela ne supprime pas réellement le caractère de la chaîne - cela vous donne une nouvelle chaîne qui contient tous les caractères de l'ancienne chaîne sauf la première. Il n'y a aucun moyen de modifier réellement une chaîne.
Chris Dodd
Le lien ne semble plus valide. Essayez plutôt le lien suivant: substring (int)
Christian Hoffmann
1
Oui, si vous souhaitez supprimer les n premiers caractères d'une variable de chaîne, procédez comme suit: variable = variable.substring (n);
Mitulát báti
68
public String removeFirstChar(String s){
   return s.substring(1);
}
Ahmed Kotb
la source
12
Si vous allez définir une nouvelle fonction, choisissez au moins un nom approprié comme removeFirst().
moinudin
55

Utilisez substring()et indiquez le nombre de caractères que vous souhaitez découper de face.

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

Réponse: "amaica"

Thilina Gihan Priyankara
la source
47

En Java, supprimez le caractère de tête uniquement s'il s'agit d'un certain caractère

Utilisez l'opérateur ternaire Java pour vérifier rapidement si votre personnage est là avant de le supprimer. Cela supprime le caractère de tête uniquement s'il existe, s'il a passé une chaîne vide, retourne une chaîne vide.

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);

Tirages:

blankstring
foobar
moobar

Java, supprimez toutes les instances d'un caractère n'importe où dans une chaîne:

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

Java, supprimez la première instance d'un caractère n'importe où dans une chaîne:

String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"
Eric Leschinski
la source
4
SEC:header = header.substring(header.startsWith("#") ? 1 : 0);
Aaron Blenkush
3
Ou avec regex:header = header.replaceFirst("^#","");
Aaron Blenkush
18

Vous pouvez utiliser la méthode de sous - chaîne de la Stringclasse qui ne prend que l'index de début et renvoie la sous-chaîne qui commence par le caractère à l'index spécifié et s'étendant jusqu'à la fin de la chaîne.

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

La chose clé à comprendre en Java est que les chaînes sont immuables - vous ne pouvez pas les changer. Donc, cela n'a aucun sens de parler de «supprimer un caractère d'une chaîne». Au lieu de cela, vous créez une nouvelle chaîne avec uniquement les caractères que vous souhaitez. Les autres articles de cette question vous donnent différentes façons de le faire, mais il est important de comprendre que ceux-ci ne changent en rien la chaîne d'origine. Toutes les références que vous avez à l'ancienne chaîne continueront de se référer à l'ancienne chaîne (sauf si vous les modifiez pour faire référence à une autre chaîne) et ne seront pas affectées par la nouvelle chaîne créée.

Cela a un certain nombre d'implications pour les performances. Chaque fois que vous «modifiez» une chaîne, vous créez en fait une nouvelle chaîne avec toutes les charges implicites (allocation de mémoire et ramasse-miettes). Donc, si vous souhaitez apporter une série de modifications à une chaîne et ne vous soucier que du résultat final (les chaînes intermédiaires seront mortes dès que vous les `` modifierez ''), il peut être plus judicieux d'utiliser un StringBuilder ou StringBuffer à la place.

Chris Dodd
la source
9

vous pouvez faire comme ça:

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

ou en général:

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

La méthode substring () renvoie une nouvelle chaîne qui contient une sous- séquence de caractères actuellement contenus dans cette séquence.

La sous-chaîne commence à la valeur spécifiée startet s'étend au caractère àindex end - 1 .

Il a deux formes. Le premier est

  1. String substring(int FirstIndex)

Ici, FirstIndex spécifie l'index à partir duquel la sous-chaîne commencera. Ce formulaire renvoie une copie de la sous-chaîne qui commence à FirstIndex et s'exécute à la fin de la chaîne d'appel.

  1. String substring(int FirstIndex, int endIndex)

Ici, FirstIndex spécifie l'index de début et endIndex spécifie le point d'arrêt. La chaîne renvoyée contient tous les caractères de l'index de début jusqu'à, mais sans inclure, l'index de fin.

Exemple

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

Je suis tombé sur une situation où je devais supprimer non seulement le premier caractère (si c'était un #, mais le premier jeu de caractères.

String myString = ###Hello Worldpourrait être le point de départ, mais je voudrais seulement garder le Hello World. cela pourrait être fait comme suit.

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

Pour le boîtier OP, remplacez whilepar ifet cela fonctionne également.

Mathieu Brouwers
la source
1
Il y aura un problème si myString == "#" car la chaîne sera hors limites à un moment donné. Pour éviter cela, vous pouvez faire (! MyString.isEmpty () && myString.charAt (0))
Christian
2

Une autre solution, vous pouvez résoudre votre problème en utilisant replaceAlldes regex ^.{1}( démo regex ) par exemple:

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

Ma version de suppression des caractères principaux, un ou plusieurs. Par exemple, String str1 = "01234", lorsque vous supprimez "0", le résultat sera "1234". Pour une chaîne str2 = "000123", le résultat sera à nouveau "123". Et pour String str3 = "000", le résultat sera une chaîne vide: "". Une telle fonctionnalité est souvent utile lors de la conversion de chaînes numériques en nombres.L'avantage de cette solution par rapport à l'expression régulière (replaceAll (...)) est que celle-ci est beaucoup plus rapide. Ceci est important lors du traitement d'un grand nombre de chaînes.

 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
la source