Remova o último caractere específico em uma string c #

87

Eu uso WinForms c #. Tenho um valor de string como abaixo,

string Something = "1,5,12,34,";

Preciso remover a última vírgula em uma string. Então, como posso excluí-lo?

user3042186
fonte
16
Por que você tem tal string? Suponho que seja por causa de um loop que concatena vírgulas em ints. Você pode usar em seu string.Join(",", ints)lugar. Isso evita vírgulas à direita em primeiro lugar.
Tim Schmelter

Respostas:

258

Experimente string.TrimEnd():

Something = Something.TrimEnd(',');
Rei rei
fonte
5
Essa é a melhor solução porque funciona para todas as strings, incluindo situações em que você não sabe com antecedência SE a string termina em vírgula ou não.
East of Nowhere
6
É por isso que ainda busco soluções até para coisas que eu poderia facilmente escrever. Normalmente, outra pessoa resolveu. :)
dpberry178
1
Portanto, as aspas simples não foram um erro. Hoje eu aprendi que char e string são definidos com aspas simples e duplas, respectivamente.
egmfrs
20

A resposta de King King está certa. Além disso, o comentário de Tim Schmelter também é uma boa sugestão no seu caso.

Mas se você realmente deseja remover a última vírgula em uma string , você deve encontrar o índice da última vírgula e remover like;

string s = "1,5,12,34,12345";
int index = s.LastIndexOf(',');
Console.WriteLine(s.Remove(index, 1));

A saída será;

1,5,12,3412345

Aqui a demonstration.

É muito improvável que você queira assim, mas eu quero apontar. E lembre-se, o String.Removemétodo não remove nenhum caractere da string original, ele retorna uma nova string.

Soner Gönül
fonte
5

Tentar string.Remove();

string str = "1,5,12,34,";
string removecomma = str.Remove(str.Length-1);
MessageBox.Show(removecomma);
shA.t
fonte
3

O método TrimEnd usa uma matriz de caracteres de entrada e não uma string. O código abaixo de Dot Net Perls , mostra um exemplo mais eficiente de como executar a mesma funcionalidade do TrimEnd.

static string TrimTrailingChars(string value)
{
    int removeLength = 0;
    for (int i = value.Length - 1; i >= 0; i--)
    {
        char let = value[i];
        if (let == '?' || let == '!' || let == '.')
        {
            removeLength++;
        }
        else
        {
            break;
        }
    }
    if (removeLength > 0)
    {
        return value.Substring(0, value.Length - removeLength);
    }
    return value;
}
Bayu
fonte
1

Ou você pode convertê-lo em Char Array primeiro:

string Something = "1,5,12,34,";
char[] SomeGoodThing=Something.ToCharArray[];

Agora você tem cada personagem indexed:

SomeGoodThing[0] -> '1'
SomeGoodThing[1] -> ','

Brinque com isso

Faisal Ashfaq
fonte
1

Experimente abaixo

Something..TrimEnd (",". ToCharArray ());

pmh
fonte
0
Dim psValue As String = "1,5,12,34,123,12"
psValue = psValue.Substring(0, psValue.LastIndexOf(","))

resultado:

1,5,12,34,123
nambi_r88
fonte
A pergunta era sobre C #, não VB.
metabuddy