Remova os últimos três caracteres de uma string


122

Quero remover os três últimos caracteres de uma string:

string myString = "abcdxxx"; 

Observe que a string é um dado dinâmico.


1
Leia os últimos 3 caracteres = uma coisa, remova os últimos 3 caracteres = outra. Qual?
Kieren Johnstone

Respostas:


234

leia os últimos 3 caracteres da string [pergunta feita inicialmente]

Você pode usar string.Substring e fornecer o índice inicial e ele obterá a substring começando do índice dado até o fim.

myString.Substring(myString.Length-3)

Recupera uma substring desta instância. A substring começa em uma posição de caractere especificada. MSDN

Editar , para postagem atualizada

Remova os últimos 3 caracteres da string [pergunta atualizada]

Para remover os últimos três caracteres da string, você pode usar string.Substring (Int32, Int32) e fornecer o índice inicial 0e o índice final três a menos que o comprimento da string . Ele obterá a substring antes dos três últimos caracteres.

myString = myString.Substring(0, myString.Length-3);

Método String.Substring (Int32, Int32)

Recupera uma substring desta instância. A substring começa em uma posição de caractere especificada e tem um comprimento especificado.

Você também pode usar o método String.Remove (Int32) para remover os últimos três caracteres, passando o índice inicial como comprimento - 3 , ele removerá deste ponto ao final da string.

myString = myString.Remove(myString.Length-3)

Método String.Remove (Int32)

Retorna uma nova string na qual todos os caracteres na instância atual, começando em uma posição especificada e continuando até a última posição, foram excluídos


13
esta não é a resposta
freios

21
Obrigado @braks, a pergunta feita inicialmente foi "ler os últimos 3 caracteres da string" Isso é editado posteriormente e eu não sabia, consulte o histórico de edição da pergunta. Seu comentário me ajudou a corrigir minha resposta que ficou errada após a edição da pergunta.
Adil

26
myString = myString.Remove(myString.Length - 3, 3);

13

Li tudo isso, mas queria algo um pouco mais elegante. Apenas para remover um certo número de caracteres do final de uma string:

string.Concat("hello".Reverse().Skip(3).Reverse());

resultado:

"he"

7
Este é bastante "criativo", pois não precisa do comprimento da string, mas a operação reversa provavelmente é mais cara.
Aleksandar,

4
Reverter uma string é definitivamente mais caro do que contar seus caracteres. Uma nova string inteira precisa ser construída, então o original copiado para ela, então a string original precisa ser coletada como lixo.
Matt Gregory

As strings @MattGregory são imutáveis: Remover, Substring, qualquer função de string gera uma nova string. Substituir o ponteiro original sempre causa a coleta de lixo. Isso ainda é mais lento, pois Enumerable.Reversearmazena a string em um char[], em seguida, em um novo char[]que é 3 mais curto e, em seguida, gera um novo string(com outro internamente char[]). Uma abordagem melhor seria new string("hello".Reverse().Skip(3)), ou apenas escrever sua própria função de extensão de string AllBut(this string in, int i)que use Substring.
Wolfzoon

@MattGregory Não é nem mesmo "contar" os caracteres de uma string, uma string tem seus Lengtharmazenados.
Wolfzoon

1
Agora também temos .SkipLast(n). Não há necessidade de reverter nada. "hello".SkipLast(3)"he"
AjitZero

9
myString.Remove(myString.Length-3);

3
myString = myString.Remove(myString.Length - 3)isso é.
A-Sharabiani


5

Você pode usar String.Removepara excluir de uma posição especificada até o final da string.

myString = myString.Remove(myString.Length - 3);

4

Provavelmente não é exatamente o que você está procurando, já que diz que são "dados dinâmicos", mas, dada sua string de exemplo, isso também funciona:

? "abcdxxx".TrimEnd('x');
"abc"



2
   string myString = "abcdxxx";
   if (myString.Length<3)
      return;
   string newString=myString.Remove(myString.Length - 3, 3);

1

Remova os últimos caracteres de uma string

TXTB_DateofReiumbursement.Text = (gvFinance.SelectedRow.FindControl("lblDate_of_Reimbursement") as Label).Text.Remove(10)

.Text.Remove(10)// usado para remover o texto do índice 10 ao final


1

O novo operador da linha C # 8.0 pode ser um ótimo atalho para isso.

Exemplo:

var shortenedString = myString[0..^1]

0
items.Remove(items.Length - 3)

string.Remove()remove todos os itens desse índice até o fim. items.length - 3obtém o índice 3 caracteres do final


0

Fácil. text = text.remove(text.length - 3). Eu subtraí 3 porque a Removefunção remove todos os itens desse índice para o final da string que étext.length . Portanto, se eu subtrair 3, obtenho a string com 3 caracteres removidos dela.

Você pode generalizar isso para remover acaracteres do final da string, assim:

text = text.remove(text.length - a) 

Então o que fiz foi a mesma lógica. A removefunção remove todos os itens de seu interior até o final da string, que é o comprimento do texto. Então, se eu subtrair ado comprimento da corda, isso vai me dar a corda coma caracteres removidos.

Portanto, não funciona apenas para 3, funciona para todos os inteiros positivos, exceto se o comprimento da string for menor ou igual a a, nesse caso ela retornará um número negativo ou 0.

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.