我有一个字符串,
"abc kskd 8.900 prew"
需要Split
此字符串,以便我得到"abc kskd"
和"8.900 prew"
如何使用C#
实现此目的?
答案 0 :(得分:3)
使用LINQ
获取第一位数的索引,然后使用Substring
:
var input = "abc kskd 8.900 prew";
var index = input.Select( (x,idx) => new {x, idx})
.Where(c => char.IsDigit(c.x))
.Select(c => c.idx)
.First();
var part1 = input.Substring(0, index);
var part2 = input.Substring(index);
答案 1 :(得分:2)
如果你不需要做一些复杂的事情,那就应该这样做:
var data = "abc kskd 8.900 prew";
var digits = "0123456789".ToCharArray();
var idx = data.IndexOfAny(digits);
if (idx != -1)
{
var firstPart = data.Substring(0, idx - 1);
var secondPart = data.Substring(idx);
}
IndexOfAny
实际上非常快。
这也可以修改为将字符串分成更多部分(使用startIndex
参数),但你没有要求。
答案 2 :(得分:0)
直截了当地使用正则表达式:
var str = "abc kskd 8.900 prew";
var result = Regex.Split(str, @"\W(\d.*)").Where(x => x!="").ToArray();
答案 3 :(得分:0)
试试这个,
public string[] SplitText(string text)
{
var startIndex = 0;
while (startIndex < text.Length)
{
var index = text.IndexOfAny("0123456789".ToCharArray(), startIndex);
if (index < 0)
{
break;
}
var spaceIndex = text.LastIndexOf(' ', startIndex, index - startIndex);
if (spaceIndex != 0)
{
return new String[] { text.Substring(0, spaceIndex), text.Substring(spaceIndex + 1) };
}
startIndex = index;
}
return new String[] {text};
}
答案 4 :(得分:0)
类似于@Dominic Kexel提供的内容,但仅限于您不想使用linq。
string[] result = Regex.Split("abc kskd 8.900 prew", @"\w*(?=\d+\.\d)");