检查分隔符时,使用分隔符拆分字符串

时间:2015-10-05 02:10:14

标签: c# string split

如何根据自定义分隔符拆分字符串,同时确保字符串以分隔符结尾?我正在尝试处理传入的客户端数据并尝试分割消息。但是客户端可能会向服务器发送一条消息,该消息由3条较小的消息组成,其中第三条消息尚未完成。即它不包含分隔符,意味着要有更多分界符。

实施例

using System;

public class Test{
    private string eofString = "<EOF>";
    private string[] eofArray = { "<EOF>" };


    public void Main(){
        string foo = "bob<EOF>jill<EOF>jake";
        string[] splitMessages = foo.Split(eofArray, StringSplitOptions.RemoveEmptyEntries);
        for(int i = 0; i < splitMessages.Length; i++){
            Console.WriteLine(splitMessages[i]);
        }       
    }
}

输出

bob
jill
jake

我的预期输出是

bob
jill

因为字符串foo的结尾并未以<EOF>结尾。

哪个错了。我希望将jake放回到字符串构建器中。

3 个答案:

答案 0 :(得分:1)

您可以使用String.EndsWith来确定字符串是否以分隔符结尾。

答案 1 :(得分:0)

您可以使用此模式进行拆分:

"<EOF>([^\<]*)"

答案 2 :(得分:0)

如果您想要一个基于正则表达式的解决方案,以下内容也可以使用。

string input = "bob<EOF>jill<EOF>jake";
Regex r = new Regex(@"(?<message>.+?)\<EOF\>", RegexOptions.Compiled);
IEnumerable<string> messages = r.Matches(input).Cast<Match>().Select(i => i.Groups["message"].Value);

基本上它是在命名的捕获组.+?中使用非贪婪匹配模式(?<message> #pattern goes here)(任何字符中的一个或多个,匹配尽可能少的字符),必须以固定的方式终止字符串<EOF>。所有匹配都在一个“通行证”中找到,只需要通过捕获组的名称从匹配集合中投射出来。