如何在字符串中仅保留数字和一些特殊字符

本文关键字:数字 特殊字符 保留 字符串 | 更新日期: 2023-09-27 18:36:30

我有一个包含常规字符、特殊字符和数字的字符串。我正在尝试删除常规字符,只保留数字和特殊字符。我使用循环来检查字符是特殊字符还是数字。然后,我用一个空字符串替换它。但是,这似乎不起作用,因为我收到错误"无法将 != 应用于字符串或字符"。我的代码如下。如果可能的话,请给我一些想法来解决这个问题。谢谢。

public string convert_string_to_no(string val)
{
    string str_val = "";
    int val_len = val.Length;
    for (int i = 0; i < val_len; i++)
    {
        char myChar = Convert.ToChar(val.Substring(i, 1));
        if ((char.IsDigit(myChar) == false) && (myChar != "-"))
        {
             str_val = str_val.replace(str_val.substring(i,1),"");
        }
    }
    return str_val;
} 

如何在字符串中仅保留数字和一些特殊字符

您可以使用

正则表达式来做到这一点,它比使用循环和清洁更快

    String test ="Q1W2-hjkxas1-EE3R4-5T";
    Regex rgx = new Regex("[^0-9-]");
    Console.WriteLine(rgx.Replace(test, ""));

在此处检查工作代码

似乎尝试将"-"更改为"-",最好构造字符串而不是替换字符。

public string convert_string_to_no(string val)
    {
        string str_val = "";
        int val_len = val.Length;
        for (int i = 0; i < val_len; i++)
        {
            char myChar = Convert.ToChar(val.Substring(i, 1));
            if (char.IsDigit(myChar) && myChar == '-')
            {
                 str_val +=  myChar; 
            }
        }
        return str_val;
    } 

I perfer Linq:

public static class StringExtensions
{
  public static string ToLimitedString(this string instance,
    string validCharacters)
  {
    // null reference checking...
    var result = new string(instance
      .Where(c => validCharacters.Contains(c))
      .ToArray());
    return result;
  }
}

用法:

var test ="Q1W2-hjkxas1-EE3R4-5T";
var limited = test.ToLimitedString("01234567890-");
Console.WriteLine(limited);

结果:

12-1-34-5

点网小提琴示例