我想将来自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.如果我们更改除英语以外的键盘语言(例如:中文),则此方法失败。
我们如何比较零而不管从键盘从英语转换为其他语言的语言?
答案 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);
}