C#字符数组在特定索引处删除

时间:2019-03-18 17:20:58

标签: c#

如果给定索引处的char是数字,则不确定从char数组中删除char的最佳方法。

private string TextBox_CharacterCheck(string tocheckTextBox)
{
    char[] charlist = tocheckTextBox.ToCharArray();
    foreach (char character in charlist)
    {
        if (char.IsNumber(character))
        {

        }

    }
    return (new string(charlist));
}

谢谢。

// 现在已解决。感谢所有贡献的人

6 个答案:

答案 0 :(得分:4)

您可以使用Linq的力量:

return new string(tocheckTextBox.Where(c => !char.IsNumber(c)).ToArray())

答案 1 :(得分:1)

使用正则表达式非常简单:

var result = Regex.Replace("a1b2c3d4", @"\d", "");

(如@Adassko所述,如果您只是想让数字0到9,而不希望其他任何数字字符,则可以使用"[0-9]"代替@"\d"。 / p>

您还可以使用StringBuilder相当有效地完成此操作:

var sb = new StringBuilder();
foreach (var ch in "a1b2c3d4")
{
    if (!char.IsNumber(ch))
    {
        sb.Append(ch);
    }   
}

var result = sb.ToString();

您也可以使用linq:

 var result = new string("a1b2c3d4".Where(x => !char.IsNumber(x)).ToArray());

答案 2 :(得分:1)

使用正则表达式:

private string TextBox_CharacterCheck(string tocheckTextBox)
{
    return Regex.Replace(tocheckTextBox, @"[\d]", string.Empty);;
}

答案 3 :(得分:0)

System.String是不可变的。您可以使用string.Replace或正则表达式将不需要的字符删除为新字符串。

答案 4 :(得分:0)

您最好的选择是使用正则表达式。 字符串是不可变的,这意味着您无法更改它们-您需要重写整个字符串-以最佳方式进行操作,您应该使用StringBuilder类和Append每个想要的字符。

还要当心您的代码-char.IsNumber不仅检查字符0-9,还会为每个数字字符(例如{{1})返回true },而您可能不想要。

这是返回٢的字符的完整列表:

true

如果只希望可分析的数字,还应该在正则表达式中使用0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९০১২৩৪৫৬৭৮৯੦੧੨੩੪੫੬੭੮੯૦૧૨૩૪૫૬૭૮૯୦୧୨୩୪୫୬୭୮୯௦௧௨௩௪௫௬௭௮௯౦౧౨౩౪౫౬౭౮౯೦೧೨೩೪೫೬೭೮೯൦൧൨൩൪൫൬൭൮൯๐๑๒๓๔๕๖๗๘๙໐໑໒໓໔໕໖໗໘໙༠༡༢༣༤༥༦༧༨༩၀၁၂၃၄၅၆၇၈၉႐႑႒႓႔႕႖႗႘႙០១២៣៤៥៦៧៨៩᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᭐᭑᭒᭓᭔᭕᭖᭗᭘᭙᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹᱀᱁᱂᱃᱄᱅᱆᱇᱈᱉᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩꣐꣑꣒꣓꣔꣕꣖꣗꣘꣙꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉꩐꩑꩒꩓꩔꩕꩖꩗꩘꩙0123456789 而不是[0-9]

您还可以使用技巧来\d在字符上输入字符串,然后.Split将其返回。这不仅可以删除一个或多个字符,还可以用其他字符替换它。 我使用此技巧从文件名中删除不正确的字符:

.Join

此代码会将有效文件名中不能使用的任何字符替换为string.Join("-", possiblyIncorrectFileName.Split(Path.GetInvalidFileNameChars()))

答案 5 :(得分:0)

如果给定索引处的char是数字,则可以使用LINQ从char数组中删除char。

CODE

//This will return you the list of char discarding the number.
var removedDigits = tocheckTextBox.Where(x => !char.IsDigit(x)); 

//This will return the string without numbers.
string output = string.join("", removedDigits);