3

我的服务器上有一个 php 文件,它以这样的字符串将信息发送到我的应用程序(c#):

Text|Name|Date|Text|Name|Date|Text|Name|Date|......现在我想拆分它,这样我可以用 Text、Name 和 Date 填充 ListViewerItem,这是下一个组合三(文本,名称,日期)应该进入一个新的 ListViewerItem。如何在“|”处仅每三次拆分一次字符串 ?

4

5 回答 5

3

只需拆分管道符号并循环取 3:

public void Foo(string content)
{
    var entries = content.Split('|');

    for(int i = 0; i < entries.Length; i += 3)
    {
        var text = entries[0 + i];
        var name = entries[1 + i];
        var date = entries[2 + i];

        // TODO: add values to listview.
    }
}
于 2012-08-12T07:58:55.477 回答
1

拆分字符串,然后对字符串进行分组:

string[] values = data.Split('|');
List<string[]> lines =
  Enumerable.Range(0, values.Length / 3)
  .Select(
    i => new string[] { values[i * 3], values[i * 3 + 1], values[i * 3 + 2] }
  )
  .ToList();
于 2012-08-12T07:58:48.333 回答
1

我假设文本、名称、日期实际上是值,所以唯一常见的分隔符是 |。我认为最好的方法是将字符串拆分为 | 然后循环生成的数组。保留一个计数器,每隔三个项目创建一个具有文本、名称和日期属性的对象。然后将此对象添加到列表中,然后绑定到 ListViewer。

于 2012-08-12T07:59:14.040 回答
0
var values = "a|b|c|a|b|c|a|b|c|a|b|c|a|b|c|a|b|c|a|b|c|a|b|c".Split('|');
var result = Enumerable.Range(0, values.Length).GroupBy(i => Convert.ToInt32(Math.Floor((i / 3d)))).Select(group => String.Join("|", group.Select(i => values[i])));
于 2012-08-12T10:35:17.997 回答
0

使用RegexLINQ

var result = from Match match 
               in Regex.Matches(inputString, @"((?<t>\w+)\|(?<n>\w+)\|(?<d>\w+))+")
                select
                    new
                        {
                            Text = match.Groups["t"].Value,
                            Name = match.Groups["n"].Value,
                            Date = match.Groups["d"].Value
                        };
于 2012-08-12T10:37:32.777 回答