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?

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

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

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"


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"

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

11
public String removeFirst(String input)
{
    return input.substring(1);
}

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.


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

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'

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.


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

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);
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.