2017-02-10 2 views
0

У меня есть строковые данные, такие как "aaa.bbb.ccc" или "aaa.bbb.ccc.ddd". Если я разделяю это как "aaa.bbb.ccc".split("."), это будет "aaa", "bbb" и "ccc". Я хочу разделить это на две строки, такие как "aaa", "bbb.ccc". Я думаю, что могу сделать это, разделив все сначала и воссоединившись, но это не разумно. Есть ли способ установить это более плавно?Я хотел бы разделить строки на два массива

ответ

4

Вы можете установить количество расщепленных частей:

string myString = "aaa.bbb.ccc"; 
int parts = 2; 
string[] myParts = myString.Split(new string[] {"."}, parts, StringSplitOptions.None); 
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", "" }.
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; 
} 
+0

Благодарим за предоставленный код. Мне нужно узнать о предоставленном коде. Мне кажется, это очень полезно для меня. – cesolution