【问题标题】:Determine which character was used in String.Split()如何确定 String.Split() 中使用的字符
【发布时间】:2019-11-21 21:50:13
【问题描述】:

如果我使用 .Split() 如何找出导致拆分的字符?

string myMessage = "Apple|Car,Plane-Truck";
//Break apart string
var splits = myMessage.Split(new Char [] {'|', ',', '-'});

foreach (string piece in splits)
{
}

我如何确定哪个 Char 最终用于拆分?

【问题讨论】:

  • 通过回顾原作?你本可以在所有这些上分开。

标签: c# .net string split


【解决方案1】:

它会在您给出的示例中对所有这些进行拆分。但一般来说,您只会看到字符串中包含哪些已定义的拆分字符:

var sourceString = "Apple|Car,Plane-Truck";
var allSplitChars = new[] {'|', ',', '-', '.', '!', '?'};

// Find only the characters that are contained in the source string
List<char> charsUsedToSplit = allSplitChars.Where(sourceString.Contains).ToList();

【讨论】:

    【解决方案2】:
    string myMessage = "Apple|Car,Plane-Truck";
    
    //Break apart string
    var splits = myMessage.Split(new Char[] { '|', ',', '-' });
    
    int accumulated_length = 0;
    foreach (string piece in splits)
    {
        accumulated_length += piece.Length + 1;
        if (accumulated_length <= myMessage.Length)
        {
            Console.WriteLine("{0} was split at {1}", piece, myMessage[accumulated_length - 1]);
        }
        else
        {
            Console.WriteLine("{0} was the last one", piece);
        }
    }
    

    【讨论】:

      【解决方案3】:

      列表中的任何字符都将用于拆分..你能澄清一下你实际上想要做什么吗?在您的示例中,拆分后的标记将是“Apple”、“Car”、“Plane”、“Truck”,因此您的每个角色都将用于拆分..

      如果您尝试确定是哪个字符导致了每个标记的拆分,那么也许您可以自己实现拆分并跟踪:

      List<Tuple<String, Char>> Splitter(string msg, char[] chars) {
        var offset = 0;
        var splitChars = new HashSet<char>(chars); 
        var splits = new List<Tuple<String, Char>>();
        for(var idx = 0; idx < msg.Length; idx++) {
          if (splitChars.Contains(msg[idx])) {
            var split = Tuple.Create(msg.Substring(offset, idx - offset), msg[idx]);
            splits.Add(split);
            offset = idx + 1;
          } 
        }
        return splits;
      }
      
      string myMessage = "Apple|Car,Plane-Truck";
      var splits = Splitter(myMessage, new [] {'|', ',', '-'});
      foreach (string piece in splits)
      {
          Console.WriteLine("word: {0}, split by: {1}", piece.Item1, piece.Item2);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 2015-08-11
        • 2011-10-24
        • 1970-01-01
        相关资源
        最近更新 更多