3

我有一个字符串,如下所示。

字符串样本=“class0 .calss1 .class2 .class3.class4 .class5 class6 .class7”;

我需要从这个示例字符串中创建一个 WORDS 列表。

WORD 是一个以句点开头并以以下结尾的字符串:

  1. 一个空格或
  2. 另一个时期或
  3. 字符串结尾

注意:这里的关键点是 - 拆分基于两个标准 - 句点和空格

我有以下程序。它工作正常。但是,是否有更简单/更有效/简洁的方法使用LINQor Regular Expressions

代码

        List<string> wordsCollection = new List<string>();
        string sample = " class0 .calss1 .class2 .class3.class4  .class5 class6 .class7";

        string word = null;

        int stringLength = sample.Length;
        int currentCount = 0;

        if (stringLength > 0)
        {
            foreach (Char c in sample)
            {

                currentCount++;
                if (String.IsNullOrEmpty(word))
                {
                    if (c == '.')
                    {
                        word = Convert.ToString(c);
                    }
                }
                else
                {

                    if (c == ' ')
                    {
                        //End Criteria Reached
                        word = word + Convert.ToString(c);
                        wordsCollection.Add(word);
                        word = String.Empty;
                    }
                    else if (c == '.')
                    {
                        //End Criteria Reached
                        wordsCollection.Add(word);
                        word = Convert.ToString(c);
                    }
                    else
                    {
                        word = word + Convert.ToString(c);
                        if (stringLength == currentCount)
                        {
                            wordsCollection.Add(word);
                        }
                    }
                }

            }
        }

结果

        foreach (string wordItem in wordsCollection)
        {
            Console.WriteLine(wordItem);

        }

在此处输入图像描述

参考:

  1. 根据谓词拆分字符串
  2. 有没有更好的方法来获取每个项目与谓词匹配的子序列?
  3. 基于 Linq 的泛型替代 Predicate<T>?
4

4 回答 4

5

您可以使用正则表达式执行此操作。

代码

Regex regex = new Regex(@"\.[^ .]+");
var matches = regex.Matches(sample);
string[] result = matches.Cast<Match>().Select(x => x.Value).ToArray();

在线查看它:ideone

结果

.calss1
.class2
.class3
.class4
.class5
.class7

正则表达式的解释

\。匹配一个点
[^. ]+ 否定字符类 - 除了空格或点之外的任何内容(至少一个)

有关的

于 2012-12-21T15:12:11.650 回答
2
string sample = " class0 .calss1 .class2 .class3.class4  .class5 class6 .class7";

string[] words = sample.Split(new char[] {'.'}).Skip(1).Select(x=> 
            "." + x.Split(new char[] {' '})[0].Trim()).ToArray();

编辑错过了列表部分:

List<string> words = sample.Split(new char[] {'.'}).Skip(1).Select(x=> 
            "." + x.Split(new char[] {' '})[0].Trim()).ToList();
于 2012-12-21T15:41:16.063 回答
0

是否需要保留 . 和空间?

如果没有,您可以使用:

sample.split(new char[]{" ", "."}).ToList();

这将为您提供一个字符串列表。

于 2012-12-21T15:13:43.197 回答
0
string sample = " class0 .calss1 .class2 .class3.class4 .class5 class6 .class7";
sample = Regex.Replace(sample, " ", String.Empty);
string[] arr = sample.Split(new char[] { '.' });
于 2012-12-21T15:33:04.480 回答