我有一个字符串数据,如"aaa.bbb.ccc"
或"aaa.bbb.ccc.ddd"
。
如果我将其拆分为"aaa.bbb.ccc".split(".")
,则会变为"aaa"
,"bbb"
和"ccc"
。
我想将其除以"aaa"
,"bbb.ccc"
这两个字符串。
我想我可以通过首先划分所有东西并重新加入它来做到这一点,但这不是聪明的方式。
有没有办法更顺利地设置它?
答案 0 :(得分:4)
您可以设置拆分部件的数量:
string myString = "aaa.bbb.ccc";
int parts = 2;
string[] myParts = myString.Split(new string[] {"."}, parts, StringSplitOptions.None);
答案 1 :(得分:3)
如果要分割第一个点字符,请使用Substring
:
String value = "aaa.bbb.ccc";
Int32 firstDotIdx = value.IndexOf( '.' );
if( firstDotIdx > -1 ) {
return new String[] {
value.Substring( 0, firstDotIdx ),
value.Substring( firstDotIdx + 1 );
}
} else {
return new String[] {
value,
"";
}
}
aaa.bbb
"然后它将返回{ "aaa", "bbb" }
。aaa.bbb.ccc
"然后它将返回{ "aaa", "bbb.ccc" }
。.aaa.bbb
"然后它将返回{ "", "aaa.bbb" }
。aaa
"然后它将返回{ "aaa", "" }
。答案 2 :(得分:0)
我有一堆扩展方法用于这些字符串操作。您的任务的示例用法如下所示。
var str = "aaa.bbb.ccc.ddd";
var result = new[] { str.TakeUntil("."), str.TakeFrom(".") };
扩展包看起来像这样。函数`结果将不包括搜索字符串本身,如果输入中没有搜索字符串,它们将返回整个输入结果(这是一个满足我对此边缘情况的需求的约定,可以更改)
public static string TakeUntil(this string s, string search)
{
if (string.IsNullOrEmpty(s)) return s;
var pos = s.IndexOf(search, StringComparison.OrdinalIgnoreCase);
if (pos >= 0)
return s.Substring(0, pos);
return s;
}
public static string TakeUntilLast(this string s, string search)
{
if (string.IsNullOrEmpty(s)) return s;
var pos = s.LastIndexOf(search, StringComparison.OrdinalIgnoreCase);
if (pos >= 0)
return s.Substring(0, pos);
return s;
}
public static string TakeFrom(this string s, string search)
{
if (string.IsNullOrEmpty(s)) return s;
var pos = s.IndexOf(search, StringComparison.OrdinalIgnoreCase);
if (pos >= 0)
return s.Substring(pos + search.Length);
return s;
}
public static string TakeFromLast(this string s, string search)
{
if (string.IsNullOrEmpty(s)) return s;
var pos = s.LastIndexOf(search, StringComparison.OrdinalIgnoreCase);
if (pos >= 0)
return s.Substring(pos + search.Length);
return s;
}