文本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 []'}
答案 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);