2013-07-06 62 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 
} 
相关问题