关于查找字符串的中间元素

时间:2014-01-26 08:54:04

标签: c# substring console-application

以下代码段采用字符串作为输入。我想要的是如果长度是偶数则获得字符串的中间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 我如何概括?逻辑中的错误是什么?

3 个答案:

答案 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
        }