以下代码段采用字符串作为输入。我想要的是如果长度是偶数则获得字符串的中间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 :(得分:2)
String.Substring的第二个参数是子串的长度,而不是Java中的索引。因此,如果您需要获取两个字符的子字符串,请传递2:
string input = "confirme";
string op = input.Substring((input.Length - 1) / 2, 2);
BTW你应该处理字符串长度小于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 :(得分:1)
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 :(得分:0)
问题:您提供字符串的总长度作为Substring()
方法的第二个参数。
解决方案: Substring()
方法从第一个参数开始删除要删除的字符总数。
来自MSDN:Substring(Int32, Int32)
从此实例中检索子字符串。子串从a开始 指定的字符位置并具有指定的长度。
替换它:
op = input.Substring((input.Length - 1) / 2,input.Length/2 -1);//logic
有了这个:
op = input.Substring((input.Length - 1) / 2,2);//logic
建议:你需要检查空字符串和字符串中偶数个字符串。
完整代码:
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
}