0

次の文字列があります。

string myString = " テストの目的。\vVision\v* テストの目標を達成する\v** 包括的\v** コントロール\v* クロスエクイティ戦略との連携\vアプローチ\v*加速 "

そして、「\ v」で分割しようとしています

私はこれを試しましたが、うまくいかないようです:

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

split.Length1 として表示されます。何か提案はありますか?

4

4 に答える 4

5

"\v"は、元の文字列の 1 つではなく 2 つの文字です (\リテラル C# 文字列のようにエスケープ文字としてカウントされません)。

リテラル"\v"で分割する必要があります。つまり、文字列を取る Split のオーバーロードを指定する必要があります。

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

「\」文字を「\\」でエスケープしなければならなかったことに注意してください

あなた'\v'は 2 文字ではなく、1 つの制御文字です。

あなたの質問自体は少し誤解を招くと思います...

文字列の例を C# に入力すると、実際には予想どおりに機能します。これ \vは、逐語的な C# 文字列が特殊文字にエスケープされるためです。

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
于 2013-07-06T19:27:19.757 に答える
-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++)
{
}
于 2013-07-06T19:31:29.223 に答える
-1

結果の配列を後で使用する必要がない場合は、分割とループを 1 つの呼び出しに組み合わせることができます。

foreach (string s in myString.Split(new[] { "\v" }, StringSplitOptions.RemoveEmptyEntries))
{
   //s is the string you can now use in your loop
}
于 2013-07-06T19:32:26.967 に答える