2014-01-26 12 views
2

下面的代碼片段將字符串作爲輸入。我正在嘗試的是如果長度是偶數,則得到字符串的中間2個元素。關於查找字符串的中間元素

 string input = "confir"; 
     string op = ""; 
     op = input.Substring((input.Length - 1)/2,input.Length/2 -1);//logic 
     Console.WriteLine(op);//display the output 

上述代碼段的輸出爲nf

當輸入改爲confirme,輸出應該fi而不是fir 如何概括?邏輯中的錯誤是什麼?

+0

的錯誤邏輯中的一個。使用基於數組的邏輯來確定字符串的長度,如果一個字符串有5個字符,那麼長度是5和b。計算一個你已經知道的值,即2是你希望返回的字符串的長度 – rism

回答

1

string input = "confirme"; 
string op = input.Substring((input.Length - 1)/2, 2); 

BTW你應該當字符串小於2個字符長的處理情況

string input = "confir"; 
if(input.Length % 2 == 0) 
    Console.WriteLine(input.Substring((input.Length/2)-1, 2)); 

這應該會給你預期的結果。首先檢查字符串長度是否是偶然的,而不是(input.Length - 1)/2,分長度由2和減去1,則取兩個字符這樣的:(input.Length/2) - 1

2

String.Substring的第二個參數是長度子字符串,而不是像Java中的索引。所以,如果你需要得到兩個字符的字符串,通過2:

string op = input.Substring((input.Length - 1)/2, Math.Min(input.Length, 2)); 

測試:

input | op | 
--------------------- 
""   | "" | 
"c"  | "c" | 
"co"  | "co" | 
"con"  | "on" | 
"conf"  | "on" | 
"confir" | "nf" | 
"confirme" | "fi" | 
+1

而且string.IsNullOrEmpty以避免空引用異常 – rism

+0

@rism空白是好的,但是很好的通知 - null檢查也是必需的 –

0

問題:您提供的字符串作爲第二個參數Substring()方法的總長度。

解決方案:Substring()方法從第一個參數開始刪除總字符數。

從MSDN:Substring(Int32, Int32)

檢索從這個實例子。子字符串起始於 指定的字符位置並具有指定的長度。

替換此:

op = input.Substring((input.Length - 1)/2,input.Length/2 -1);//logic 

這一點:

op = input.Substring((input.Length - 1)/2,2);//logic 

建議:你需要檢查空字符串和偶數的字符串charatcters的。

完整代碼:

 string input = "confirme"; 
     string op = ""; 
     if (input.Length > 0 && input.Length % 2 == 0) 
     { 
      op = input.Substring((input.Length - 1)/2, 2);//logic 
      Console.WriteLine(op);//display the output 
     }