-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':不能从 'string' 转换为 '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). 因此,至少您需要指定StringSplitOptions一个字符串并将其转换为一个字符串的数组,否则编译器不知道您要调用什么方法。

您可以通过删除一条if语句来减少逻辑。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

正如 Dave 提到的,字符串拆分只包含一个字符。如果需要拆分字符串,请使用以下代码

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()在 C# 中的工作方式,你传入的参数应该是字符数组或者带选项的字符串。该方法还有其他重载,但这些与您的问题无关。
而不是 using words = str1.Split("}"),您应该使用words = str1.Split('}')which 传入一个字符,而不是一个字符串作为参数。
对于需要检查字符串而不是字符的情况,您应该使用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;
}

在此处查看有关如何使用拆分方法的教程

于 2013-01-07T22:14:27.843 回答
1

如果需要匹配"##"可以将字符串数组传递给 string.split

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

如果您想通过 } 或 ## 拆分两个字符串,您可以使用要拆分的字符串数组。

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

要查看此工作,请查看此 Doodle如何正确使用 string.Split 的示例

于 2013-01-07T22:24:57.430 回答
1

为什么不在一行字符串中完成所有操作

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