把句子分成这样的小段.net
本文关键字:小段 net 句子 | 更新日期: 2023-09-27 18:17:16
我需要拆分这段文字
这真的很酷,我喜欢。
到
this
is
really
cool
,
and
i
like
it
.
你知道怎么做吗?用空格分隔
this
is
really
cool,
and
i
like
it.
我需要标点符号i作为数组的单独元素
谢谢
不能使用String。
相反,您可以使用Regex.Split
来执行此操作:
Regex r = new Regex(@"[ ]|(?=[,.])");
string[] items = r.Split(input);
在这个模式中,我们要么匹配空格(它被"消耗"),要么提前查找标点符号(并且不"消耗"它)。
如果您只关心输出而不太关心性能,为什么不这样做呢:
string[] splitSentence(string sentence) {
return sentence
.Replace(",", " , ")
.Replace(".", " . ")
.Split(' ', StringSplitOptions.RemoveEmptyEntries);
}
它会工作!:)当然,如果你确实关心性能,请看Scott的回答。
我可能会用老式的方法来处理这个问题,简单地遍历每个字符。比如:
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;
}