解析以字符串中的@字符开头的单词

时间:2014-07-02 18:10:15

标签: c# parsing

我必须编写一个程序来解析以'@'开头的单词的字符串,然后将这些单词与@符号一起返回。

我尝试过类似的事情:

char[] delim = { '@' };
string[] strArr = commenttext.Split(delim);
return strArr;

但它会返回数组中没有'@'的所有单词。

我需要一些非常直接的东西。没有LINQ喜欢的东西

如果字符串是“abc @ert @xyz”,那么我应该回到@ert和@xyz。

3 个答案:

答案 0 :(得分:3)

如果你定义" word" as"由空格隔开"那会有用:

string[] strArr  = commenttext.Split(' ')
                              .Where(w => w.StartsWith("@"))
                              .ToArray();

如果您需要更复杂的东西,正则表达式可能更合适。

  

我需要一些非常直接的东西。没有LINQ喜欢的东西>

非Linq等价物将是:

var words = commenttext.Split(' ');
List<string> temp = new List<string>();
foreach(string w in words)
{
   if(w.StartsWith("@")) 
       temp.Add(w);
}
string[] strArr = temp.ToArray();

答案 1 :(得分:0)

如果您反对使用Linq,除非您需要使用较旧的.NET版本,否则不应该使用Linq,这些方法可以满足您的需求。

string[] words = commenttext.Split(delimiter);

for (int i = 0; i < words.Length; i++)
{
    string word = words[i];
    if (word.StartsWith(delimiter))
    {
        // save in array / list
    }
}

答案 2 :(得分:0)

 const string test = "@Amir abcdef @Stack @C# mnop xyz";
        var splited = test.Split(' ').Where(m => m.StartsWith("@")).ToList();
        foreach (var b in splited)
        {
            Console.WriteLine(b.Substring(1, b.Length - 1));
        }
        Console.ReadKey();