我想把字符串分成两个数组

时间:2017-02-10 08:59:38

标签: c#

我有一个字符串数据,如"aaa.bbb.ccc""aaa.bbb.ccc.ddd"。 如果我将其拆分为"aaa.bbb.ccc".split("."),则会变为"aaa""bbb""ccc"。 我想将其除以"aaa""bbb.ccc"这两个字符串。 我想我可以通过首先划分所有东西并重新加入它来做到这一点,但这不是聪明的方式。 有没有办法更顺利地设置它?

3 个答案:

答案 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;
}