2011-06-24 44 views
2

我有方法GetOption(5)返回值5K23我需要獲取字符串的最後兩個字符事情是值是字符串值,所以我需要使用Substring我曾嘗試這樣做:幫助檢查字符串中的數字值是否爲奇數C#

if(Convert.ToInt32(GetOption(5).Substring(GetOption(5).Length-2, 2) % 2 == 1)) 

我似乎無法得到它的權利,任何人都可以幫助我。

感謝

+1

豈不是更好地使用正則表達式來檢查呢?就像'^。* [0-9] [13579] $' – khachik

+2

@khachik我不知道「更好」,但我喜歡它。也可以只用'[13579] $'來「與標題對齊」。 – 2011-06-24 18:04:24

+0

@pst,這裏的「更好」意味着「更快」並且減輕GC的負擔。 – khachik

回答

7

你並不真正需要的最後兩位數字,以確定號碼是否是奇數

var option = GetOption(5); 
var isOdd = int.Parse(option[option.Length - 1].ToString()) % 2 == 1; 
+0

's /你真的不/你根本不// –

+0

它似乎並不適用於我,如果我這樣做if( isOdd)它拋出一個錯誤。輸入字符串的格式不正確 –

+0

@Sandeep在這種情況發生時,你確定''option'包含''5K23''嗎? –

1
var t = "5K23"; 
var regex = new Regex(@"\d{2}$"); 
var match = regex.Match(t); 
if (match.Success) 
{ 
    var extracted = match.Value; 
    // Do more stuff 
} 
+1

現在他有兩個問題! – mletterle

+1

我發現這裏的正則表達式比子字符串方法更可讀,更直觀 - 儘管我只是使用['Regex.Match'](http://msdn.microsoft.com/zh-cn/library/0z2heewz .aspx)在這裏。這Perlesque半報價在這裏不是非常合理,IMOHO ;-) – 2011-06-24 18:06:37

1

我喜歡@Lukáš' answer(+1),但原因你的代碼沒有按」 t工作是...

Convert.ToInt32 
(
    GetOption(5).Substring 
    (
     GetOption(5).Length-2, 2 
    ) % 2 == 1 
) 

不正確的paren分組。你正在通過<long thing> % 2 == 1Convert.ToInt32()

儘量保持行簡短易讀。

var s = GetOption(5); 
if(Convert.ToInt32(s.Substring(s.Length-2, 2)) % 2 == 1) 
{ 
    // do stuff 
} 
+1

在OP中傳遞給SubString的索引很好。你想從len-2開始2個字符。開始len-2和複製len字符是不正確的,並會拋出一個ArgumentOutOfRangeException。 – mletterle

+0

你說得對,我認爲帶有2個int參數的'Substring()'在C#中的工作方式與Java中的相同(我是一個Java人員)。顯然這是不正確的!據此編輯。謝謝。 –

0
int x; 
    string option = GetOption(5); 
    if (Int32.TryParse(option.Substring(option.Length - 2), out x) && x % 2 == 1) 
相關問題