如何拆分特殊字符'##'和'}'

时间:2013-01-07 21:52:49

标签: c# .net

我已尝试Herehere too 仍然没有运气。

文本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 []'}

8 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:3)

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

答案 2 :(得分: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;
}

答案 3 :(得分:1)

如果您需要匹配"##"you you can pass an array of string into string.split

tring[] separators = {"##"};
string [] sarr = mystr.Split(separators);

答案 4 :(得分: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;
}

答案 5 :(得分: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;
}

检查here以获取有关如何使用Split方法的教程

答案 6 :(得分:1)

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

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

要查看此工作,请查看此Doodle An example of how to use string.Split correctly

答案 7 :(得分:1)

为什么不在一个行字符串中全部完成

str1 = "Some text that contained } and again } or maybe }"; 
var items = str1.Split(new string[] { "##" ,"}" },StringSplitOptions.RemoveEmptyEntries);