/ / Como dividir parte numérica de seqüência alfanumérica em c #? - c #, winforms, tabela de dados

Como dividir a peça numérica da cadeia alfanumérica em c #? - c #, winforms, datatable

Eu armazenei um valor em string neste formato 12.5PerRs. Eu quero separar essa string como 12.5. por isso eu tentei esse código

string s4 = (dataGridView1.Rows[e.RowIndex].Cells["Rate"]).Value.ToString();
string numbers = "";
string alpha = "";
foreach (char c in s4)
{
if (Char.IsDigit(c))
{
numbers = numbers + c;
}
else if (Char.IsLetter(c))
{
alpha = alpha + c;
}
}

Supor string s4="12.5RsPer tem esse valor, mas com esse código que eu implementei, estou recebendo 125 como resultado, pois isso não é esperado.

O que devo fazer para dividir esse valor da maneira desejada?

Respostas:

1 para resposta № 1

Um ponto não é uma letra, é por isso que isso retorna falso: Char.IsLetter("."). É um caractere de pontuação que é uma categoria diferente. Você precisaria Char.IsPunctuation("."). Mas culturas diferentes usam separadores decimais diferentes, portanto essa abordagem não é muito robusta.

Então você pode usar este método:

public static decimal? ExtractNumberFromStart(string input, NumberFormatInfo nfi = null)
{
if (nfi == null) nfi = NumberFormatInfo.CurrentInfo;
char sep = nfi.NumberDecimalSeparator[0]; // no culture uses multiple characters as separator
var numberPart = input.TrimStart().TakeWhile(c => Char.IsDigit(c) || c == sep);
decimal dec;
if (decimal.TryParse(string.Concat(numberPart), NumberStyles.Number, nfi, out dec))
return dec;
else
return null;
}

Sua amostra:

string input = "12.5PerRs";
decimal? dec = ExtractNumberFromStart(input);
if (dec.HasValue)
{
string number = dec.ToString();                // 12.5
string alpha = input.Substring(number.Length); // PerRs
}

1 para resposta № 2

Você pode usar regex, este corresponderá a todos os numberDotNumber na string.

 Regex regex = new Regex(@"([1-9])+(.)+([1-9])");
Match match = regex.Match(s);
if (match.Success)
{
value = decimal.Parse(match.Value);
}

0 para resposta № 3

tente assim.

string value = "125.5PerRs";
Decimal dValue = 0;
for (int i=0; i<value.Length;i++)
{
if (!Char.IsDigit(value[i]) && value[i] != ".")
{
dValue = Convert.ToDecimal(value.Substring(0,i));
break;
}
}

em seguida, basta pegar o valor após o valor decimal da string para obter o valor alfa.

string alpha = value.Substring(dValue.ToString().Length);

0 para a resposta № 4

Talvez isso possa ajudar?

if (Char.IsDigit(c) || (c == ".") || (c == ","))
{
numbers += c;
}