Eve*_*ien 1 .net c# parsing text
我不想重新发明已编写的东西,所以我想知道.NET Framework中是否有一个ReadWord()函数可以根据白色空格和换行符分隔的文本提取单词.
如果没有,你有一个你想分享的实现吗?
string data = "Four score and seven years ago";
List<string> words = new List<string>();
WordReader reader = new WordReader(data);
while (true)
{
string word =reader.ReadWord();
if (string.IsNullOrEmpty(word)) return;
//additional parsing logic goes here
words.Add(word);
}
Run Code Online (Sandbox Code Playgroud)
不是我直接意识到的.如果你不介意一次性完成它们,你可以使用正则表达式:
Regex wordSplitter = new Regex(@"\W+");
string[] words = wordSplitter.Split(data);
Run Code Online (Sandbox Code Playgroud)
如果你有前导/尾随空格,你会在开头或结尾得到一个空字符串,但你总是可以Trim
先调用.
另一种选择是编写一个基于a读取单词的方法TextReader
.如果您使用的是.NET 3.5,它甚至可能是一种扩展方法.示例实施:
using System;
using System.IO;
using System.Text;
public static class Extensions
{
public static string ReadWord(this TextReader reader)
{
StringBuilder builder = new StringBuilder();
int c;
// Ignore any trailing whitespace from previous reads
while ((c = reader.Read()) != -1)
{
if (!char.IsWhiteSpace((char) c))
{
break;
}
}
// Finished?
if (c == -1)
{
return null;
}
builder.Append((char) c);
while ((c = reader.Read()) != -1)
{
if (char.IsWhiteSpace((char) c))
{
break;
}
builder.Append((char) c);
}
return builder.ToString();
}
}
public class Test
{
static void Main()
{
// Give it a few challenges :)
string data = @"Four score and
seven years ago ";
using (TextReader reader = new StringReader(data))
{
string word;
while ((word = reader.ReadWord()) != null)
{
Console.WriteLine("'{0}'", word);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
'Four'
'score'
'and'
'seven'
'years'
'ago'
Run Code Online (Sandbox Code Playgroud)
小智 5
不是这样,但是您可以使用String.Split将字符串拆分为基于分隔字符或字符串的字符串数组.您还可以为拆分指定多个字符串/字符.
如果您不想将所有内容都加载到内存中,那么您可以编写自己的流类,在从流中读取时执行它,但上面是对少量数据字拆分的快速修复.
归档时间: |
|
查看次数: |
337 次 |
最近记录: |