【问题标题】:Unable to Split the string accordingly无法相应地拆分字符串
【发布时间】:2013-07-18 12:06:31
【问题描述】:

我知道这个问题会被问无数次,但我有点卡住了。 我有一个类似

的字符串

"Doc1;Doc2;Doc3;12"

它可以是类似的东西

"Doc1;Doc2;Doc3;Doc4;Doc5;56"

它就像几段用分号分隔的字符串,后跟一个数字或id。

我需要分别提取数字/id 和字符串。 确切地说,我可以有 2 个字符串:一个有 "Doc1;Doc2;Doc3""Doc1;Doc2;Doc3;Doc4" 另一个只有数字/id 为“12”或“34”或“45”等。 是的,我正在使用 C# 3.5

我知道这是一个非常简单而诙谐的问题,但这个人被卡住了。 需要专家协助。

问候 阿努拉格

【问题讨论】:

  • var leList = yourString.Split(';').ToList() 在最后一个元素中你有 ID -> var id = leList.Last()
  • “我可以有 2 个字符串”是什么意思?作为期望的结果还是作为输入?
  • @TimSchmelter 所需输入
  • @user1638283,由于帖子已解决,请接受答案。您可以通过单击每个答案的投票区域下方的灰色小复选标记来做到这一点.

标签: c# arrays string delimiter


【解决方案1】:

string.LastIndexOfstring.Substring 是您尝试做的事情的关键。

var str = "Doc1;Doc2;Doc3;12";
var ind = str.LastIndexOf(';');
var str1 = str.Substring(0, ind);
var str2 = str.Substring(ind+1);

【讨论】:

  • +1,只要模式始终是 OP 给出的示例,这种组合就可以工作。但是,请为 OP 提供一个代码示例,您有 12k 代表,您知道代码示例是一个很好的答案。
  • @MichaelPerrenoud 在您撰写评论时,我正在编辑一个示例 - 我的时间很短,我想我应该先把第一部分写进去。 :)
  • @user1638283 很高兴我能帮上忙!在 StackOverflow 上,接受答案是将您的问题标记为“已解决”的正确方法。请参阅stackoverflow.com/help/someone-answers 和/或stackoverflow.com/help/accepted-answer
【解决方案2】:

一种方式:

string[] tokens = str.Split(';');
var docs = tokens.Where(s => s.StartsWith("Doc", StringComparison.OrdinalIgnoreCase));
var numbers = tokens.Where(s => s.All(Char.IsDigit));

【讨论】:

  • 感谢蒂姆先生...帮助很大
【解决方案3】:
String docs = s.Substring(0, s.LastIndexOf(';'));
String number = s.Substring(s.LastIndexOf(';') + 1);

【讨论】:

  • 感谢您的回答
【解决方案4】:

一种可能的方法是:

var ids = new List<string>();
var nums = new List<string>();

foreach (var s in input.Split(';'))
{
    int val;
    if (!int.TryParse(s, out val)) { ids.Add(s); }
    else { nums.Add(s); }
}

其中input 类似于Doc1;Doc2;Doc3;Doc4;Doc5;56。现在,ids 将容纳所有 Doc1 类似值,nums 将容纳所有 56 类似值。

【讨论】:

    【解决方案5】:

    您可以使用 StringTokenizer 功能。 http://www.c-sharpcorner.com/UploadFile/pseabury/JavaLikeStringTokenizer11232005015829AM/JavaLikeStringTokenizer.aspx

    使用“;”分割字符串 StringTokenizer st = new StringTokenizer(src1,";");

    收集最终的字符串。那将是您的 ID。

    【讨论】:

      【解决方案6】:

      您可以尝试以下两种选择之一:(假设您的输入字符串位于string str;

      方法 1

      1. 获取LastIndexOf(';')
      2. 根据index 拆分string。这将为您提供 stringint 部分。
      3. 拆分string部分并处理它
      4. 处理int 部分

      方法二

      1. ;上拆分字符串
      2. 运行 for 循环 - for (int i = 0; i &lt; str.length - 2; i++) - 这是 string 部分
      3. 单独处理 str[length - 1] - 这是int 部分

      请以此为起点,因为可能有其他方法可以解决此问题

      【讨论】:

        【解决方案7】:
        string actual = "Doc1;Doc2;Doc3;12";
        int lstindex = actual.LastIndexOf(';');
        string strvalue = actual.Substring(0, lstindex);
        string id = actual.Substring(lstindex + 1);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-05-02
          • 1970-01-01
          • 2022-01-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多