Java - removendo o primeiro caractere de uma string

215

Em Java, eu tenho uma String:

Jamaica

Gostaria de remover o primeiro caractere da string e retornar amaica

Como eu faria isso?

Calibre2010
fonte

Respostas:

341

Use a substring()função com um argumento de 1para obter a substring da posição 1 ( após o primeiro caractere) até o final da string (deixando o segundo argumento fora do padrão para o comprimento total da string).

"Jamaica".substring(1);
moinudin
fonte
21
É importante observar que, na verdade, isso não remove o caractere da string - fornece uma nova string que possui todos os caracteres da string antiga, exceto a primeira. Não há como realmente modificar uma string.
Chris Dodd
O link parece não ser mais válido. Tente o seguinte link: substring (int)
Christian Hoffmann
1
Sim, se você deseja remover os primeiros n caracteres de uma variável de cadeia, faça o seguinte: variable = variable.substring (n);
Mitulát Bati
67
public String removeFirstChar(String s){
   return s.substring(1);
}
Ahmed Kotb
fonte
12
Se você estiver indo para definir uma nova função, pelo menos escolha um nome adequado como removeFirst().
moinudin
55

Use substring()e forneça o número de caracteres que deseja aparar da frente.

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

Resposta: "amaica"

Thilina Gihan Priyankara
fonte
47

Em Java, remova o caractere inicial apenas se for um determinado caractere

Use o operador ternário Java para verificar rapidamente se seu personagem está lá antes de removê-lo. Isso remove o caractere à esquerda somente se ele existir, se for passado uma string em branco, retorne a string em branco.

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

Impressões:

blankstring
foobar
moobar

Java, remova todas as instâncias de um caractere em qualquer lugar de uma sequência:

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

Java, remova a primeira instância de um caractere em qualquer lugar de uma sequência:

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

Você pode usar o método de substring da Stringclasse que pega apenas o índice inicial e retorna a substring que começa com o caractere no índice especificado e se estende até o final da string.

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

O principal a entender em Java é que as Strings são imutáveis ​​- você não pode alterá-las. Portanto, não faz sentido falar em 'remover um caractere de uma string'. Em vez disso, você cria uma NOVA string com apenas os caracteres que deseja. As outras postagens nesta pergunta oferecem várias maneiras de fazer isso, mas é importante entender que elas não alteram a string original de forma alguma. Todas as referências que você possui à cadeia antiga continuarão a se referir à cadeia antiga (a menos que você as altere para se referir a uma cadeia diferente) e não serão afetadas pela cadeia recém-criada.

Isso tem várias implicações para o desempenho. Cada vez que você está 'modificando' uma string, na verdade você está criando uma nova string com toda a sobrecarga implícita (alocação de memória e coleta de lixo). Portanto, se você desejar fazer uma série de modificações em uma string e se importar apenas com o resultado final (as strings intermediárias estarão inoperantes assim que você as "modificar"), poderá fazer mais sentido usar um StringBuilder ou StringBuffer.

Chris Dodd
fonte
9

você pode fazer assim:

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

ou em geral:

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

O método substring () retorna uma nova String que contém uma subsequência de caracteres atualmente contidos nessa sequência.

A substring começa no especificado starte se estende ao caractere em index end - 1.

Tem duas formas. O primeiro é

  1. String substring(int FirstIndex)

Aqui, FirstIndex especifica o índice no qual a substring começará. Este formulário retorna uma cópia da substring que começa em FirstIndex e é executada no final da cadeia de chamada.

  1. String substring(int FirstIndex, int endIndex)

Aqui, FirstIndex especifica o índice inicial e endIndex especifica o ponto de parada. A cadeia retornada contém todos os caracteres do índice inicial, até, mas não incluindo, o índice final.

Exemplo

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

Me deparei com uma situação em que eu tinha que remover não apenas o primeiro caractere (se fosse um #, mas o primeiro conjunto de caracteres).

String myString = ###Hello Worldpoderia ser o ponto de partida, mas eu só gostaria de manter o Hello World. isso pode ser feito da seguinte maneira.

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

No caso do OP, substitua whilepor ife ele também funciona.

Mathieu Brouwers
fonte
1
Haverá um problema se myString == "#" porque a String estará fora dos limites em algum momento. Para evitar isso, você pode fazer (! MyString.isEmpty () && myString.charAt (0))
Christian
2

Outra solução, você pode resolver seu problema usando replaceAllalgum regex ^.{1}( regex demo ), por exemplo:

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

Minha versão da remoção de caracteres principais, um ou vários. Por exemplo, String str1 = "01234", ao remover o '0' inicial, o resultado será "1234". Para uma string str2 = "000123", o resultado será novamente "123". E para String str3 = "000" o resultado será string vazia: "". Essa funcionalidade geralmente é útil ao converter seqüências numéricas em números.A vantagem dessa solução em comparação com o regex (replaceAll (...)) é que este é muito mais rápido. Isso é importante ao processar um grande número de Strings.

 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
fonte