У меня есть строковые данные, такие как "aaa.bbb.ccc"
или "aaa.bbb.ccc.ddd"
. Если я разделяю это как "aaa.bbb.ccc".split(".")
, это будет "aaa"
, "bbb"
и "ccc"
. Я хочу разделить это на две строки, такие как "aaa"
, "bbb.ccc"
. Я думаю, что могу сделать это, разделив все сначала и воссоединившись, но это не разумно. Есть ли способ установить это более плавно?Я хотел бы разделить строки на два массива
0
A
ответ
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;
}
Благодарим за предоставленный код. Мне нужно узнать о предоставленном коде. Мне кажется, это очень полезно для меня. – cesolution