換行表示可以依賴於環境的方法:Linux例如使用\n
。
爲了方便起見,你可以使用一個StringReader
:
public static IEnumerable<string> Lines (string text) {
string line;
using (StringReader reader = new StringReader(text)) {
while ((line = reader.ReadLine()) != null) {
yield return line;
}
}
}
懶惰評估行:這可能在未來有所幫助,如果你比如有一個巨大的文件,只需要表現出前10行給用戶。
然後調用:
return new LinkedList<string>(Lines(text));
編輯:
要獲得對,你可以引入一個新的方法:
第二種方法則可以使用拆分項目成對:
public static KeyValuePair<string,string> SplitToKeyValue(string text) {
Regex p = new Regex(@"^(\w+)\s+(.*)$");
Match m = p.Match(text);
return new KeyValuePair<string,string>(m.Groups[1].Value,m.Groups[2].Value);
}
然後cre吃LinkedList
有:使用Mono的csharp
交互shell
return new LinkedList<KeyValuePair<string,string>>(Lines(text).Select(SplitToKeyValue));
DEMO
:
$ csharp
Mono C# Shell, type "help;" for help
Enter statements below.
csharp> using System.IO;
csharp> using System.Text.RegularExpressions;
csharp> public static class Foo {
>
> public static KeyValuePair<string,string> SplitToKeyValue(string text) {
> Regex p = new Regex(@"^(\w+)\s+(.*)$");
> Match m = p.Match(text);
> return new KeyValuePair<string,string>(m.Groups[1].Value,m.Groups[2].Value);
> }
>
> public static IEnumerable<string> Lines (string text) {
> string line;
> using (StringReader reader = new StringReader(text)) {
> while ((line = reader.ReadLine()) != null) {
> yield return line;
> }
> }
> }
>
> }
csharp> string inp = "LOAD =5.01E+10\nMPY $1\nADD $2";
csharp> new LinkedList<KeyValuePair<string,string>>(Foo.Lines(inp).Select(Foo.SplitToKeyValue))
{ [LOAD, =5.01E+10], [MPY, $1], [ADD, $2] }
或fiddle。
在* Windows *環境中,它是'\ r \ n',在* Linux *上,它是'\ n'。 –
你的意思是'var lines = myString.Split(new [] {「\ r \ n」,「\ n」},StringSplitOptions.None).ToList();' – StuartLC
@InfernumDeus:你用什麼類型帕爾斯? 'KeyValuePair'? –