-1

私はすでにここここでも試しましたが 、まだ運がありません。

文1:

}と再び}または多分}を含むいくつかのテキスト

テキスト2:

##と再び##または多分##を含むいくつかのテキスト

ここに私のコード

string str1 = "Some text that contained } and again } or maybe }";
// Some time its contained ##

string[] words;
if (str1.Contains("}"))
{
    words = str1.Split("}");
}
else if (str1.Contains ("##"))
{
    words = str1.Split("##");
} else {
    words = null;
}

2つのエラーが発生しました

'string.Split(params char [])'に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります

引数「1」:「文字列」から「char[]」に変換できません}

4

8 に答える 8

6

使用してみてください

str1.Split(new [] {"}"}, StringSplitOptions.RemoveEmptyEntries);

str1.Split(new [] {"##"}, StringSplitOptions.RemoveEmptyEntries);

StringSplitOptions.None空の文字列を保持したい場合に使用します

string.Splitは、次の署名:Split(String[], StringSplitOptions)および。でのみ文字列として入力を受け取りますSplit(String[], Int32, StringSplitOptions)。したがって、少なくとも1つの文字列を指定StringSplitOptionsして、1つの文字列の配列に変換する必要があります。そうしないと、コンパイラは、どのメソッドを呼び出そうとしているのかわかりません。

if1つのステートメントを削除することで、ロジックを減らすことができます。Split入力文字列の出現が見つからない場合、メソッドは例外をスローしません。

string str1 = "Some text that contained } and again } or maybe }";

string[] words;
if (str1.Contains("}") || str1.Contains ("##"))
{
    words = str1.Split(new [] {"}", "##"}, StringSplitOptions.RemoveEmptyEntries);

}
else
{
    words = null;
}
于 2013-01-07T21:54:56.767 に答える
3
str1.Split(new [] {"}","##"}, StringSplitOptions.RemoveEmptyEntries);
于 2013-01-07T21:59:52.133 に答える
2

デイブが述べたように、文字列分割は1文字しか取りません。文字列を分割する必要がある場合は、次のコードを使用してください

string str1 = "Some text that contained } and again } or maybe }";
    // Some time its contained ##

string[] words;
if (str1.Contains("}"))
{
    words = str1.Split(new string[] { "}" }, StringSplitOptions.None);
}
else if (str1.Contains ("##"))
{
    words = str1.Split(new string[] { "##" }, StringSplitOptions.None);
} else {
    words = null;
}
于 2013-01-07T21:56:24.577 に答える
1

このコードを試してください。Regex使用することもできるので、このクラスではパターンで分割できることに注意してください。

string str1 = "Some text that contained } and again } or maybe }";
// Some time its contained ##

string[] words;
if (str1.Contains("}"))
{
    words = str1.Split('}');
}
else if (str1.Contains ("##"))
{
    words = Regex.Split(str1, @"\#\#");
} else {
    words = null;
}
于 2013-01-07T21:58:46.237 に答える
1

一致させる必要がある場合は"##"文字列の配列をstring.splitに渡すことができます。

tring[] separators = {"##"};
string [] sarr = mystr.Split(separators);
于 2013-01-07T21:57:04.357 に答える
1

string.Split()がC#で機能する方法では、渡すパラメーターは文字配列またはオプション付きの文字列である必要があります。メソッドには他にもオーバーロードがありますが、それらはあなたの質問とは無関係です。
を使用する代わりに、パラメータとして文字列ではなく文字を渡すをwords = str1.Split("}")使用する必要があります。 また、文字ではなく文字列をチェックする必要がある場合は、の代わりにを使用する必要があります。words = str1.Split('}')
words = str1.Split(new string[] { "##" }, StringSplitOptions.None)words = str1.Split("##")

最終的なコードは次のようになります

string str1 = "Some text that contained } and again } or maybe }";
        // Some time its contained ##

string[] words;
if (str1.Contains("}"))
{
    words = str1.Split( ('}'));
}
else if (str1.Contains("##"))
{
    words = str1.Split(new string[] { "##" }, StringSplitOptions.None);
}
else
{
    words = null;
}

Splitメソッドの使用方法に関するチュートリアルについては、こちらを確認してください

于 2013-01-07T22:14:27.843 に答える
1

両方の文字列を}または##で分割する場合は、分割する文字列の配列を使用できます。

stringToSplit.Split(new []{"}","##"}, StringSplitOptions.None);

これが機能することを確認するには、このDoodleをご覧ください。string.Splitを正しく使用する方法の例

于 2013-01-07T22:24:57.430 に答える
1

すべてを1行の文字列で実行してみませんか

str1 = "Some text that contained } and again } or maybe }"; 
var items = str1.Split(new string[] { "##" ,"}" },StringSplitOptions.RemoveEmptyEntries);
于 2013-01-07T22:28:39.470 に答える