2013-07-06 83 views
0

我有以下字符串:在C#中分割字符串,爲什麼這不起作用?

串的myString =「目標測試\ vVision \ V *遞送測試 目標符\ v **綜合符\ v **對照\ V *對齊橫股票 策略\ vApproach \ v *的加速「

,我試圖拆就 」\ v「

我試過,但它似乎不工作:

char[] delimiters = new char[] { '\v' }; 
string[] split = myString.Split(delimiters); 
for (int i = 0; i < split.Length; i++) { 
} 

split.Length顯示爲1.任何建議?

+1

看起來你並不是逃避反斜槓。 –

+0

我運行你的代碼和Length == 8. –

回答

0

使用這樣的

string[] separators = {@"\v"}; 
     string value = @"The objective for test.\vVision\v* Deliver a test goals\v** Comprehensive\v** Control\v* Alignment with cross-Equities strategy\vApproach\v*An acceleration"; 
     string[] words = value.Split(separators, StringSplitOptions.RemoveEmptyEntries); 
3

"\v"是兩個字符,而不是一個,在原始的字符串(這是不計算\作爲轉義字符作爲文字C#字符串一樣)。

你需要在字面"\v"分裂,這意味着你需要指定拆分的,需要一個字符串超載:

string[] split = narrative.Split(new string[] {"\\v"}, StringSplitOptions.None); 

注意我是如何與逃脫「\」字符「\\」

您的是單個控制字符,不是兩個字符。

我認爲你的問題本身有些誤導......

你的榜樣字符串,如果進入到C#將實際工作像你所期望的,因爲在一個verbatum C#字符串\v將被換到一個特殊字符:

string test = " The objective for test.\vVision\v* Deliver a test goals\v** Comprehensive\v** Control\v* Alignment with cross-Equities strategy\vApproach\v*An acceleration "; 

char[] delimiters = new char[] { '\v' }; 
Console.WriteLine(test.Split(delimiters).Length); // Prints 8 

不過,我覺得你的實際字符串確實有反斜槓-v在它,而不是逃脫符\ v:

string test = " The objective for test.\\vVision\\v* Deliver a test goals\\v** Comprehensive\\v** Control\\v* Alignment with cross-Equities strategy\\vApproach\\v*An acceleration "; 

char[] delimiters = new char[] { '\v' }; 
Console.WriteLine(test.Split(delimiters).Length); // Prints 1, like you say you see. 

因此,你可以解決它通過使用一個字符串數組來分割字符串上述:

string test = " The objective for test.\\vVision\\v* Deliver a test goals\\v** Comprehensive\\v** Control\\v* Alignment with cross-Equities strategy\\vApproach\\v*An acceleration "; 

string[] delimiters = new [] { "\\v" }; 
Console.WriteLine(test.Split(delimiters, StringSplitOptions.None).Length); // Prints 8 
+0

那麼,如果我們遵循C#符號,字符串'「\ v」'是一個字符(字符串的長度是1),而'@「\ v」'和' 「\\ v」都表示長度相同的兩個字符串。另外請注意,調試器通常會使用「''''是轉義字符」的格式。 –

+0

@JeppeStigNielsen是的,但是OP向我們展示了「\ v」實際上是兩個字符的文本,而不是一個轉義字符。這有點誤導,但顯然是兩個人物,否則他的分裂將起作用。 –

-1

使用這樣,

string myString = " The objective for test.\vVision\v* Deliver a test goals\v** Comprehensive\v** Control\v* Alignment with cross-Equities strategy\vApproach\v*An acceleration"; 
string[] delimiters = new string[] { "\v" }; 
string[] split = myString.Split(delimiters, StringSplitOptions.None); 
for (int i = 1; i < split.Length; i++) 
{ 
} 
+1

@Down Voter,關注評論? –

+0

我沒有downvote,但你不需要逃避字符串。目前你的代碼不會拆分字符串。 – keyboardP

+0

我沒有downvote這個答案。但這似乎與Matthew Watson先前的回答相當。也許這就是爲什麼有人投下答案的原因。 –

-1

如果您不需要爲以後使用所產生的陣,您可以將分割和循環合併爲一個調用。

foreach (string s in myString.Split(new[] { "\v" }, StringSplitOptions.RemoveEmptyEntries)) 
{ 
    //s is the string you can now use in your loop 
} 
相關問題