如果我使用的是.Split(),我如何找出导致拆分的字符?
string myMessage = "Apple|Car,Plane-Truck";
//Break apart string
var splits = myMessage.Split(new Char [] {'|',','-'});
foreach (string piece in splits)
{
}
如何确定最终将哪个Char用于拆分?
如果我使用的是.Split(),我如何找出导致拆分的字符?
string myMessage = "Apple|Car,Plane-Truck";
//Break apart string
var splits = myMessage.Split(new Char [] {'|',','-'});
foreach (string piece in splits)
{
}
如何确定最终将哪个Char用于拆分?
它将在您给出的示例中对所有这些进行拆分。但通常,您只会看到字符串中包含哪些已定义的拆分字符:
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);
}