字符串转换 - 删除一些字符并用ASCII代码替换非数字

时间:2015-12-09 00:49:49

标签: c# ascii

我需要取值CS5999-1并将其转换为678359991.基本上用等效的ASCII值替换任何字母字符并剥去破折号。我需要摆脱非数字字符并使值唯一(进入的一些数据都是数字,我确定这将使记录唯一)。

我玩过正则表达式,可以用空字符串替换字符,但无法弄清楚如何用ASCII值替换字符。

代码仍然停留在.NET 2.0(美国公司),以防任何想法。

我已经尝试了几种不同的方法来做到这一点,不,我不希望SO成员为我编写代码。我正在寻找想法。

用我用过的空字符串替换字母字符: strResults = Regex.Replace(strResults,@“[A-Za-z \ s]”,string.Empty);

此循环将自行替换字符。基本上,如果我可以替换找到一种方法来替换替换值与我将拥有的ACSII值,但已尝试将char值转换为int和我发现的其他几种不同的方法,并且都会出现错误。

foreach (char c in strMapResults)
  {
   strMapResults = strMapResults.Replace(c,c);
  }

4 个答案:

答案 0 :(得分:3)

检查每个字符是否在a-z范围内。如果是这样,请将ASCII value添加到列表中,如果它在0-9范围内,只需添加该号码。

-

字母数字范围之外的所有字符(例如+=)都将被忽略。

如果您在特别大的字符串上运行此功能或想要更好的性能,您可能需要使用StringBuilder代替{{1}}。

答案 1 :(得分:2)

对于ASCII范围内的所有字符,编码值与Unicode代码点相同。 ISO / IEC 8859-1和UCS-2也是如此,但与其他遗留编码无关。

由于UCS-2与UCS-2中的值(包括所有ASCII字符,如上所述)的UTF-16相同,并且因为.NET char是UTF-16单元,你需要做的只是转换为int

var builder = new StringBuilder(str.Length * 3); // Pre-allocate to worse-case scenario
foreach(char c in str)
{
   if (c >= '0' && c <= '9')
     builder.Append(c);
   else if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
     builder.Append((int)c);
}
string result = builder.ToString();

答案 2 :(得分:1)

如果您想知道如何使用正则表达式(在您的问题中提到正则表达式),这是一种方法。

下面的代码过滤所有非数字字符,将字母转换为ASCII表示,并转储任何其他字符,包括所有非ASCII字母字符。请注意,将(int)char视为字符的ASCII值的等效值仅在字符在ASCII字符集中真正可用时才有效,A-Za-z显然就是这种情况。

MatchEvaluator filter = match =>
{
    var alpha = match.Groups["asciialpha"].Value;
    return alpha != "" ? ((int) alpha[0]).ToString() : "";
};

var filtered = Regex.Replace("CS5999-1", @"(?<asciialpha>[A-Za-z])|\D", filter);

答案 3 :(得分:0)

试试这个

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string input = "CS5999-1";
            MatchEvaluator evaluator = new MatchEvaluator(Replace);
            string results = Regex.Replace(input, "[A-Za-z\\-]", evaluator); 
        }
        static string Replace(Match match)
        {
            if (match.Value == "-")
            {
                return "";
            }
            else
            {
                byte[] ascii = Encoding.UTF8.GetBytes(match.Value);
                return ascii[0].ToString();
            }
        }
    }
}
​