2017-07-26 5 views
0

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"; 
     } 

文字列は「0001」であれば、例えばそれは我々が英語以外のキーボード言語(例:中国)を変更する場合、このメソッドは失敗した1を返す必要があります。

キーボードから英語に変更された言語に関係なく、ゼロを他の言語と比較するにはどうすればよいですか?

+0

あなただけのデフォルトのロケールを使用して文字列に戻す整数に変換し、できませんか? – Bathsheba

+0

適切なカルチャ設定で 'Integer.Parse'を使用して番号を解析することはできますか? – LoztInSpace

+0

'String.Equals(str1、str2、StringComparison.OrdinalIgnoreCase)' – wdc

答えて

0

CJK文字(Windows 10ではMicrosoft JhengHei)を含むフォントをチェックし、中国語のキーボードレイアウトでは全角数字(U + FF10で始まる)が返されると推測しました。他のキーボードレイアウトでも異なる数字が提供される可能性があるため、char.GetNumericValue()メソッドを使用することをお勧めします(What's the deal with char.GetNumericValue?も参照)。

EDIT:インデックスは、元のポストのようにトリミング0追加された場合、単一のパラメータを有するSubstring()が同じ文字列を返し、それを反映するメソッド名を変更し、その拡張メソッドからなります。それと

は、のようになり、あなたの方法は次のとおりです。

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); 
} 
関連する問題