2016-12-15 134 views
-1

我想分裂一個特殊格式的string特殊字符串分割

string example01 = "2016-05-14-Title-863-Pos-01" 

string必須分成:

date = "2016-05-14"; 
title = "Title-863"; 
position = "Pos-01"; 

我知道我可以string.splitRegex分裂這個string但我想有一個「分裂」功能與格式化分隔符或類似的東西。

更多的例子:

string example02 = "2016-05-15-Rectangle-Right" 
string example03 = "2016-05-16-Border-05-Top" 

例-方法:

string[] split = SplitString("****-**-**", "-"); 

因此,第一個參數用作佔位符和作爲分隔符的第二個參數。

+3

似乎你可以分開「 - 」然後加入fi rst 3,接下來的2和最後兩個來獲得理想的結果。你是什​​麼意思_我希望有一個「分裂」功能格式化分隔符或東西_?你想寫自己的功能? – juharr

+0

這取決於很多事情。你確實可以使用REGEX,我仍然不知道如何正確使用。但是如果你的數據總是遵循這個特定的格式,你可以使用split。 – Phiter

+0

字符串是否始終採用此確切格式? – Equalsk

回答

1

只有當字符串始終採用該確切格式時纔有效。如果有什麼改變了這變成古怪:

// Original string, has to be in the exact format shown 
var test = "2016-05-14-Title-863-Pos-01"; 

// Split into groups based on the '-' character 
var split = test.Split('-'); 

// Uses string interpolation '$' to build new strings 
var date = $"{split[0]}-{split[1]}-{split[2]}"; 
var title = $"{split[3]}-{split[4]}"; 
var position $"{split[5]}-{split[6]}"; 

輸出:

日期:2016年5月14日
標題:標題-863
位置:POS-01

由於Phiter指出,如果使用C#的舊版本,則使用:

var date = string.Format("{0}-{1}-{2}", split[0], split[1], split[2]); 
var title = split[3] + "-" + split[4]; 
var position = split[5] + "-" + split[6]; 
+0

需要注意的是,這僅適用於C#6或更高版本。以前的版本不會接受字符串插值。例如:我嘗試在IDEONE上運行您的代碼,並在此符號上拋出錯誤。他們可能使用舊版本的C#。 – Phiter

+0

好點,增加了常規的'string.Format'和串聯。 – Equalsk

+0

不幸的是,格式並不總是相同的。日期仍然是其餘的例子.... –

3

你可以使用一個通用的BlockSplit方法像這樣的

string[] BlockSplit(string source, char separator, params int[] blocks) 
{ 
    string[] parts = source.Split(separator); 
    List<string> splitted = new List<string>(); 

    int skipped = 0; 
    foreach (int x in blocks) 
    { 
     string block = string.Join(separator.ToString(), parts.Skip(skipped).Take(x)); 
     skipped += x; 
     splitted.Add(block); 
    } 
    return splitted.ToArray(); 
} 

調用此方法與你的輸入

string test = "2016-05-14-Title-863-Pos-01"; 
string[] result = BlockSplit(test, '-', new int[] {3,2,2}); 
foreach(string s in result) 
    Console.WriteLine(s); 

這可能在extension method轉化的字符串類,並允許這樣的語法一個

string test = "2016-05-14-Title-863-Pos-01"; 
string[] result = test.BlockSplit('-', new int[] {3,2,2}); 
+0

耶穌基督這是如此的酷 – Phiter

+0

這並不壞。不幸的是,格式並不總是相同的。日期仍然存在,但其餘的可能會有所不同。但我會記住這種方法。 :) –

+0

那麼,這裏唯一的要求是,你總是有相同的塊之間的分隔符,當然你應該提供你想要檢索的每個塊的計數。 – Steve

0

如果您的數據格式都是一樣的,你可以做到這一點如T他:

string test = "2016-05-14-Title-863-Pos-01"; 
string[] ts = test.Split('-'); 
string date = ts[0] + "-" + ts[1] + "-" + ts[2]; 
string title = ts[3] + "-" + ts[4]; 
string position = ts[5] + "-" + ts[6]; 

Console.WriteLine(String.Format("Date: {0}\nTitle: {1}\nPosition: {2}", date,title,position)); 

輸出:

日期:2016年5月14日
標題:標題-863
位置:POS-01

See it in action.

+0

不幸的是,格式並不總是相同的。日期仍然是其餘的.... –

+0

你應該在問題中指定。 – Phiter