C#学习教程:解析空格分隔文本的最佳方法只是在空格上分开。我想出了一个有点难看的解析器,但我想知道是否有人有更优雅的设计。这是在C#顺便说一句。编辑:我的丑陋版本虽然丑陋,但实际上是O(N),可能比使用RegEx更快。privatestring[]tokenize(stringinput){string[]tokens=input.Split('');列表输出=新列表();对于(inti=0;i1Thentoken=m.Groups(2).ToStringEndIfm=m.NextMatchEndWhile注1:上面的答案和这个思路是一样的。希望这个答案能更好地解释幕后的细节:)Microsoft.VisualBasic.FileIO命名空间(在Microsoft.VisualBasic.dll中)有一个TextFieldParser,可用于拆分以空格分隔的文本。它处理引号内的字符串(即“thisisatoken”thisistokew)。请注意,仅仅因为DLL表示VisualBasic并不意味着您只能在VB项目中使用它。它是整体框架的一部分。有一种状态机方法。privateenumState{None=0,InTokin,InQuote}privatestaticIEnumerableTokinize(stringinput){input+='';//确保我们以空白结束Statestate=State.None;状态?下一个=空;//设置下一个状态意味着我们找到了一个tokinStringBuildersb=newStringBuilder();foreach(charcininput){switch(state){default:caseState.None:if(char.IsWhiteSpace(c))continue;elseif(c=='"'){state=State.InQuote;继续;}elsestate=State.InTokin;break;caseState.InTokin:if(char.IsWhiteSpace(c))next=State.None;else如果(c=='"')next=State.InQuote;休息;caseState.InQuote:if(c=='"')next=State.None;break;}if(next.HasValue){yieldreturnsb.ToString();sb=newStringBuilder();state=next.Value复制代码;next=null;}elsesb.Append(c);}}它可以轻松扩展为嵌套引号和转义等。返回IEnumerable允许您的代码仅在需要时进行解析。这种惰性方法没有任何真正的缺点,因为字符串是不可变的,所以你知道在解析整个内容之前输入不会改变。请参阅:http://en.wikipedia.org/wiki/Automata-Based_Programming您可能还想查看正则表达式。这可能对你有帮助。这是从MSDN中删除的一个示例……使用系统;使用System.Text.RegularExpressions;publicclassTest{publicstaticvoidMain(){//为重复的单词定义一个正则表达式。Regexrx=newRegex(@"b(?w+)s+(k)b",RegexOptions.Compiled|RegexOptions.IgnoreCase);//定义一个测试字符串。stringtext="敏捷的棕色狐狸狐狸跳过了懒惰的狗狗。";//查找匹配项。MatchCollectionmatches=rx.Matches(text);//报告找到的匹配项数。Console.WriteLine("{0}匹配找到:n{1}",matches.Count,text);//报告每场比赛。foreach(匹配匹配匹配){GroupCollectiongroups=match.Groups;Console.WriteLine("'{0}'在{1}和{2}位置重复",groups["word"].Value,groups[0].Index,groups[1].Index);}}}//该示例向控制台生成以下输出://找到3个匹配项://Thequickbrownfoxfoxjumpedoverthelazydogdog。//'The'在位置0和4处重复//'fox'重复在位置20和25//'dog'在位置50和54重复Craig是正确的-使用正则表达式Regex.Split可能更符合您的需要。[^t]+T|"[^"]+"t使用正则表达式肯定是最好的选择,但是这个只返回整个字符串。我试过调整它,但到目前为止运气不佳。以上是C#学习教程:最好的waytoparsespace-delimitedtext所有内容分享,如果对大家有用,需要了解更多C#学习教程,希望大家多多关注—string[]tokens=System.Text.RegularExpressions.Regex.Split(this.BuildArgs,@"[^t]+t|""[^""]+""t");本文整理自网络,不代表立场,如涉及侵权,请点击有权联系管理员删除,如有请注明出处: