【问题标题】:How to split up and divide long string如何拆分和分割长字符串
【发布时间】:2021-04-26 09:51:34
【问题描述】:

我有一串想要拆分的数据,例如我的一个字符串包含多个字符,它们各自拥有的统计数据和能力。

完整字符串:

"Andy,135,Punch-Kick-Bite-Headbutt|Tom,120,Bite-Slap-Dodge-Heal|Nathan,105,Bite-Scratch-Tackle-Kick"

所以上面的字符串有用“|”分隔的字符以及以“-”分隔的能力。 我设法将它们按每个字符分开,这样它的“Andy,135,Punch-Kick-Bite-Headbutt”就在数组的一个索引中:

string myString = "Andy,135,Punch-Kick-Bite-Headbutt|Tom,120,Bite-Slap-Dodge-Heal|Nathan,105,Bite-Scratch-Tackle-Kick";

string[] character = myString.ToString().Split('|');
for (int i = 0; i < character.Length; i++)
{
    Debug.Log("Character data:    " + character[i].ToString());
}

现在我如何将“Andy,135,Punch-Kick-Bite-Headbutt”之类的东西变成一个统计数据并只将其检索到一个统计数据数组中,因此它的“Andy,135”并将能力拉入一个字符串数组,所以它是:“Punch-Kick-Bite-Headbutt”

所以我会将我的 statArray 设为“Andy,135”,将 abilityArray 设为“Punch-Kick-Bite-Headbutt”

【问题讨论】:

  • 我的建议:将您的数据存储为 JSON 并使用序列化程序读取它。这样一来,您就有了一种易于理解的格式,而且您不必花时间编写序列化程序。
  • 再次使用string.Split,但这次拆分,?然后,您可以再次将名称和统计信息粘合在一起。或者,使用LastIndexOf,或IndexOf,获取,的位置,然后使用string.Substring抓取它两侧的字符串的两个部分
  • 您是否需要字符串首先具有该格式?例如呢? JSON?
  • @derHugo 它是我用作工具的资产,因此它需要单个字符串数据。接下来我也在研究 JSON。

标签: c# arrays string


【解决方案1】:

我强烈建议定义类来存储该数据:

public class Character
{
    public string Name { get; set; }
    public int Stat { get; set; }
    public string[] Abilities { get; set; }
}

我会写以下 LINQ:

// First split by pipe character to get each character (person)
// in raw format separately
var characters = longString.Split('|')
    // Another step is to separate each property of a character,
    // so it can be used in next Select method.
    // Here we split by comma
    .Select(rawCharacter => rawCharacter.Split(','))
    // Finally we use splitted raw data and upon this, we create
    // concrete object with little help of casting to int and
    // assign abilities by splitting abilities list by hyphen -
    .Select(rawCharacter => new Character() 
      {
          Name = rawCharacter[0],
          Stat = int.Parse(rawCharacter[1]),
          Abilities = rawCharacter[2].Split('-'),
      })
    .ToArray();

【讨论】:

  • 我认为,稍微解释一下会大有帮助。不鼓励仅使用代码的答案。此外,调用两个不同的东西(具有不同的数据类型)rawCharacter 有点令人困惑 IMO。您可以使用单个 Select,而不是链接它们
  • @canton7 感谢评论,不过加了cmets之后,我觉得还是把Selects链起来更清楚了:)
  • 谢谢你,它做到了我想要的。
猜你喜欢
  • 1970-01-01
  • 2013-06-12
  • 1970-01-01
  • 2015-08-09
  • 2020-12-19
  • 2023-03-17
  • 1970-01-01
  • 2015-12-27
  • 2016-06-13
相关资源
最近更新 更多