Разбить предложение на части, подобные этой .net - PullRequest
0 голосов
/ 10 декабря 2011

Мне нужно разделить этот текст

Это действительно круто, и мне это нравится.

на это

this
is
really
cool
,
and
i
like
it
.

Любая идеякак это сделать?разделив пробелом, получим

this
is
really
cool,
and
i
like
it.

Мне нужна пунктуация в виде отдельного элемента массива

спасибо

Ответы [ 3 ]

4 голосов
/ 10 декабря 2011

Вы не можете использовать String.Split для разделения на "ничто".

Вместо этого вы можете использовать Regex.Split для этого:

Regex r = new Regex(@"[ ]|(?=[,.])");
string[] items = r.Split(input);

В этом паттерне мы либо сопоставляем пробел (который «расходуется»), ИЛИ, мы делаем упреждения для пунктуации (и не «потребляем» его).

2 голосов
/ 10 декабря 2011

Если все, что вас волнует, это вывод, и вы не сильно обеспокоены производительностью, почему бы не сделать что-то вроде этого:

string[] splitSentence(string sentence) {
    return sentence
        .Replace(",", " , ")
        .Replace(".", " . ")
        .Split(' ', StringSplitOptions.RemoveEmptyEntries);
}

Это сработает!:) Конечно, если вы действительно заботитесь о производительности, см. Ответ Скотта.

0 голосов
/ 10 декабря 2011

Я, вероятно, подхожу к этому старомодно и просто перебираю каждого персонажа.Что-то вроде:

    static private IList<string> SplitString(string str)
    {
        List<string> lines = new List<string>();

        StringBuilder line = new StringBuilder();

        for(int i = 0; i < str.Length; ++i)
        {
            if (char.IsWhiteSpace(str[i]))
            {
                // split silently at whitespace
                if (line.Length > 0)
                    lines.Add(line.ToString());
                line.Clear();
            }
            else if (IsPunctuationCharacter(str[i]))
            {
                // split for punctuation and include each punctuation character as its own line
                if (line.Length > 0)
                    lines.Add(line.ToString());
                lines.Add(new string(new char[] { str[i] }));
                line.Clear();
            }
            else
            {
                // all other characters get added to the current line
                line.Append(str[i]);
            }
        }

        if (line.Length > 0)
            lines.Add(line.ToString());

        return lines;
    }

    static private bool IsPunctuationCharacter(char c)
    {
        if (c == ',' || c == '.' || c == '?' || c == '!')
            return true;
        else
            return false;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...