如何确定String.Split()

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

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

foreach (string piece in splits)
{
}

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

gshj2003 回答:如何确定String.Split()

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

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();
,
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);
    }
}
,

列表中的任何字符都将用于拆分..您能说明您实际要执行的操作吗?在您的示例中,拆分后的令牌将为“ 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);
}
本文链接:https://www.f2er.com/3054582.html

大家都在问