按索引查找字符串中的单词

时间:2019-03-16 11:51:38

标签: c#

我正在尝试按指定的索引获取字符串中的单词,单词只能由字母和数字组成。

我尝试了指定的代码,但不幸的是,它生成以下异常:“长度不能小于零。 参数名称:length”。我猜想是在第18行。

代码的目标是通过指定的索引获取单词。

private string WordByIndex(string text, int index)
{
  try
  {
    int start = index;
    int end = index;

    while (char.IsLetterOrDigit(text[start]))
    {
      start--;
    }
    start++;

    while (char.IsLetterOrDigit(text[end]))
    {
      end++;
    }

    return text.Substring(start, end - start);
  }
  catch (Exception ex) { throw ex; }
}

3 个答案:

答案 0 :(得分:2)

您只需要在字符串范围内保持开始和结束:

private string WordByIndex(string text, int index)
{
    int start = index;
    int end = index;

    while (start >= 1 && char.IsLetterOrDigit(text[start - 1]))
    {
        start--;
    }

    while (end < text.Length && char.IsLetterOrDigit(text[end]))
    {
        end++;
    }

    return text.Substring(start, end - start);
}

(我删除了您的try-catch-block,因为它没有任何atm功能)

您的方法的好处是不会创建多余的字符串副本或使用正则表达式

请参见https://dotnetfiddle.net/vFacCN

答案 1 :(得分:0)

        string x = "Hello my friend"; // your string
        int index = 6; // index where the word starts
        x = x.Remove(0, index); // Remove everything from the start of the string up to the word starts
        string[] y = null; // Create new array
        y = x.Split(new[] { " " }, StringSplitOptions.None); // Split what remains of the string by spaces
        Console.WriteLine(y[0]); // Print the word

这将输出:

  

这里是功能:

public static string WordByIndex(string text, int index)
    {
        text = text.Remove(0, index);
        string[] y = text.Split(new[] { " " }, StringSplitOptions.None);
        return y[0];
    }

此:

string word = WordByIndex("Word1 Word2 Word3", 6);
Console.WriteLine(word);

将返回:

  

Word2

答案 2 :(得分:0)

请尝试这个

private  string WordByIndex(string text, int index)
{
    try
    {
        int start = index;

        while (char.IsLetterOrDigit(text[start]))
        {
            start--;
        }
        start++;

        text= text.Substring(start); 

        var result=Regex.Match(text,@"[a-zA-Z0-9]{1,}");

        return result.Value;
    }
    catch (Exception ex) { throw ex; }
    }

请参见dotnetfiddle

上的工作示例

希望有帮助