2012-01-05 87 views
1

我正致力於將VIN號碼解碼爲有用的信息,併爲國家提供一系列雙字母(EG:SA-SM是英國)。我如何檢查SG是否在SA和SM之間?我正在考慮十六進制,但不能轉換爲十六進制,因爲它通過E.檢查字符串是否在兩個字母之間

回答

6
if (String.Compare("SG","SA") > 0 && String.Compare("SG","SM") < 0) 
{ // SG between SA and SM 
} 

忽略大小寫

if (String.Compare("SG","SA",true) > 0 && String.Compare("SG","SM",true) < 0) 
{ // SG between SA and SM 
} 

您還可以使用的CurrentCulture,CurrentCultureIgnoreCase,InvariantCulture的,InvariantCultureIgnoreCase,有序,OrdinalIgnoreCase之一(msdn docs

if (String.Compare("SG","SA",CurrentCultureIgnoreCase) > 0 && String.Compare("SG","SM",CurrentCultureIgnoreCase) < 0) 
{ // SG between SA and SM 
} 
+0

真棒,謝謝! – 2012-01-05 04:48:59

+0

字符串也有'CompareOrdinal'方法。如果你的字符串包含字母和數字(這可能是一個vin),這很好。祝你好運。 – Hogan 2012-01-05 04:56:48

2

如果你堅持使用一個數字,十六進制不是唯一的基地:那麼base-26呢?

var str = "SK"; 
var base26 = 26*(str[0]-'A')+(str[1]-'A'); 

只要兩個字符串的長度相同,按字典順序比較字符串沒有任何問題。

+0

這很有趣,如果有一個小寫'a':D – Hogan 2012-01-05 04:45:59

+0

@Hogan如果我剛剛將字符串初始化爲'「SK」',那麼小寫字母「a」來自哪裏? :) :) :)把笑話放在一邊,我認爲你提出了一個很好的觀點:字符串需要轉換爲大寫字母,並且在轉換爲base-26之前檢查僅包含字母。 – dasblinkenlight 2012-01-05 04:48:37

+0

是的,這正是我的觀點 - 滾動你自己很有趣,但是'String.Compare'已經寫出了更多的功能。 – Hogan 2012-01-05 04:53:40

0

試試這樣說:

string test= "SASGSM"; 
if(test.IndexOf("SG") > -1) { 

//your action 

} 
+2

這不是他在「之間」 – 2012-01-05 04:38:36

+1

之間的意思是的,他正在談論「之間的範圍」,而不是字符串中字面上的字符。 – 2012-01-05 04:39:17

3
value[0] == 'S' && value[1] >= 'A' && value[1] <= 'M' 
+0

This works too ... thanks! – 2012-01-05 04:51:51

相關問題