【问题标题】:Splitting string and displaying on site in 2 blocks (C#)拆分字符串并以 2 个块在现场显示 (C#)
【发布时间】:2017-05-18 14:17:34
【问题描述】:

我有如下产品字符串:

Super fin og enkel skjorte med 常规版型 og klassisk 按钮向下 克拉夫。 Den lukkes med knapper foran og har to brystlommer。

Farve:海军

材质:100% 原石

我想要做的是始终能够拆分此字符串,以便我可以在描述中显示第一部分,而在详细信息中显示其他部分(Farve:...,Materiale:...)部分。

我曾尝试在 Environment.NewLine 上进行拆分,但它没有捕捉到线条。 顶部(描述)中的段落可能不止一个。

谢谢!

【问题讨论】:

  • Farve 是否总是对描述进行分隔?
  • 我不这么认为。那就是问题所在。我在考虑冒号,因为我认为我们在第一部分根本没有使用它们。
  • 那么我们很难提供帮助。您必须首先分析所有案例以找到共同的分隔符
  • 是的,我知道你是对的。我会继续寻找一些东西。谢谢

标签: c# string split logic


【解决方案1】:

您可以尝试逐行迭代并确定该行是描述的一部分还是“详细信息”。唯一的要求是您事先了解所有可能的细节。

这样的事情可能会起作用(未经测试):

string[] detailTypes = {"Farve:", "Materiale:"}; // Add any number of details here if there are more

StringBuilder description = new StringBuilder();
List<String> details = new List<String>();

foreach (string line in new LineReader(() => new StringReader(text))) // text is the whole string
{
    bool isDetail = false;
    foreach(string det in detailTypes)
    {
        if(line.StartsWith(det))
        {
            isDetail = true;
            break;
        }
    }

    if(isDetail)
        details.Add(line);
    else
        description.AppendLine(line);
}

通过此代码运行“文本”后,您会发现您的描述字符串构建器是整个描述,详细信息在字符串列表中。

可以这样获取描述的字符串值:description.ToString()

不过,这仅在您的所有详细信息都在代码顶部的数组中时才有效。但是,如果您不知道所有可能的详细信息,并且它们没有唯一的分隔符,那么计算机也无法知道它们。

替代方案:

如果您不了解详细信息,可以使用冒号。代替if(line.StartsWith(det)),您可以执行if(line.Contains(":")) 之类的操作

如果选择这种方法,请去掉内部的 foreach 循环和 detailTypes 数组。

编辑:

已编辑以包含 Jorge Turrado 的建议

【讨论】:

  • 谢谢,我试试这个。
【解决方案2】:

最好不要使用字符串 += 字符串。 StringBuilder 性能更好,使用方便

StringBuilder sb = new StringBuilder();
sb.Append(""); // AddText
sb.AppendLine("");  //AddLine
sb.ToString(); // Get the result string

【讨论】:

  • 好收获!我已经编辑了我的答案以包括这个。它也可以使用其他改进,但这是一个重要的概念。谢谢!
猜你喜欢
  • 1970-01-01
  • 2020-09-22
  • 2013-10-12
  • 2011-02-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多