如何在C#中将键盘语言从英语更改为其他语言时以编程方式比较数字0

时间:2017-07-26 08:20:47

标签: c# algorithm

我想将来自TextBox的零作为字符串进行比较,以便在c#中将其从前面删除。

 private string RemoveLeadingZeros(string str)//TextBox.Text
        {
            int index = -1;
            for (int i = 0; i < str.Trim().Length; i++)
            {
                if (str[i] == '0')//This comparison fails if i change the keyboard language from english to some other language ex. chinese
                    continue;
                else
                {
                    index = i;
                    break;
                }
            }

            return (index != -1) ? str.Substring(index) : "0";
        }

因此,例如,如果字符串是&#34; 0001&#34;它应该返回1.如果我们更改除英语以外的键盘语言(例如:中文),则此方法失败。

我们如何比较零而不管从键盘从英语转换为其他语言的语言?

1 个答案:

答案 0 :(得分:0)

我检查了包含CJK字符的字体(Windows 10上的Microsoft JhengHei),并从中推断出中文键盘布局将返回全宽数字(从U + FF10开始)。由于其他键盘布局可能提供甚至不同的数字,因此最好选择使用char.GetNumericValue()方法(另请参阅What's the deal with char.GetNumericValue?)。

带有单个参数的

编辑: Substring()如果索引为0则返回相同的字符串。在原始帖子中添加了修剪,更改了方法名称以反映它,并使其成为扩展方法。

这样,您的方法将如下所示:

private static string TrimAndRemoveLeadingZeros(this string str)
{
    int idx = 0;
    if (string.IsNullOrEmpty(str)) return str;
    str = str.Trim();
    for (int i = 0; i < str.Length; i++)
    {
        int num = (int)char.GetNumericValue(str[i]);
        if (num == 0) idx++;
        else break;
    }
    return str.Substring(idx);
}