我正在尝试按指定的索引获取字符串中的单词,单词只能由字母和数字组成。
我尝试了指定的代码,但不幸的是,它生成以下异常:“长度不能小于零。 参数名称: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; }
}
答案 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功能)
您的方法的好处是不会创建多余的字符串副本或使用正则表达式
答案 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
上的工作示例希望有帮助