[英]how does the String.Split method determine separator precedence when passed multiple multi-character separators?
[英]How to determine character used in String.Split()
如果我使用 .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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.