使用 .NET MicroFramework,这是 C# 的真正精简版本。例如,System.String几乎没有我们多年来享受的任何好处。
我需要将文本文档分割成行,这意味着分割 。但是,String.Split 只提供按字符分割,而不提供按字符串分割。
如何以有效的方式将文档分割成行(例如,不要在文档中的每个字符上疯狂循环)?
附注System.String 还缺少 Replace 方法,因此不起作用。
附言正则表达式也不是 MicroFramework 的一部分。
你可以做
string[] lines = doc.Split('\n');
for (int i = 0; i < lines.Length; i+= 1)
lines[i] = lines[i].Trim();
假设 µF 完全支持 Trim()。 Trim() 将删除所有空格,这可能很有用。否则使用
TrimEnd('\r')
我会循环遍历文档中的每个字符,因为这显然是必需的。您认为
String.Split
如何运作?不过,我会尝试只击中每个角色一次。
保留迄今为止找到的字符串列表。重复使用
IndexOf
,将当前偏移量传递到字符串中(即上一个匹配项 + 2)。
如何以有效的方式将文档分割成行(例如,不要在文档中的每个字符上疯狂循环)?
您认为内置的
Split
是如何工作的?
自己重新实现它作为扩展方法即可。
关于:
string path = "yourfile.txt";
string[] lines = File.ReadAllLines(path);
或者
string content = File.ReadAllText(path);
string[] lines = content.Split(
Environment.NewLine.ToCharArray(),
StringSplitOptions.RemoveEmptyEntries);
阅读.NET Micro Framework 3.0,此代码可以工作:
string line = String.Empty;
StreamReader reader = new StreamReader(path);
while ((line = reader.ReadLine()) != null)
{
// do stuff
}
这在某些情况下可能会有所帮助:
StreamReader reader = new StreamReader(file);
string _Line = reader.ReadToEnd();
string IntMediateLine = string.Empty;
IntMediateLine = _Line.Replace("entersign", "");
string[] ArrayLineSpliter = IntMediateLine.Split('any specail chaarater');
如果您想要一个适用于整个字符串的MicroFramework兼容分割函数,这里有一个可以解决这个问题,类似于使用StringSplitOptions.None的常规框架版本:
private static string[] Split(string s, string delim)
{
if (s == null) throw new NullReferenceException();
// Declarations
var strings = new ArrayList();
var start = 0;
// Tokenize
if (delim != null && delim != "")
{
int i;
while ((i = s.IndexOf(delim, start)) != -1)
{
strings.Add(s.Substring(start, i - start));
start = i + delim.Length;
}
}
// Append left over
strings.Add(s.Substring(start));
return (string[]) strings.ToArray(typeof(string));
}
string[] lines = theText.Split(
new string[] { "\r\n", "\r", "\n" },
StringSplitOptions.None
);
您可以用子字符串拆分字符串。
String.Split(new string[] { "\r\n" }, StringSplitOptions.None);