[英]the most efficient way to separate string
我有这个字符串:
“B82V16814133260”
什么是从中获取两个字符串的最有效方法:
left part String:“B82V”rigth part string:“16814133260”
规则是这样的:取右边的所有数字并从中创建字符串,然后取出提醒并将其放入另一个字符串中。
这是我的解决方案,但它太笨重了! 如何做到简短有效?
String leftString = "";
String rightString="";
foreach (char A in textBox13.Text.Reverse())
{
if (Char.IsNumber(A))
{
rightString += A;
}
else
{
break;
}
}
char[] arr = rightString.ToArray();
Array.Reverse(arr);
rightString=new string(arr);
leftString = textBox13.Text.Replace(rightString, "");
这产生了你所期望的:
var given = "B82V16814133260";
var first = given.TrimEnd("0123456789".ToCharArray());
var rest = given.Substring(first.Length);
Console.Write("{0} -> {1} -- {2}", given, first, rest);
// B82V16814133260 -> B82V -- 16814133260
好吧,另一个答案可能更好,但无论如何我写了这个,所以我发布了它:
需求:
using System.Text.RegularExpressions;
码:
string str = "B82V16814133260";
string[] match = Regex.match(str, @"^([\d\w]+?\w)(\d+)$").Groups;
string left = match[1];
string right = match[2];
这应该非常快:
int index = text.Length - 1;
while (index >= 0 && Char.IsDigit(text[index]))
{
index--;
}
string left = text.Substring(0, index + 1);
string right = text.Substring(index + 1);
我认为'最有效'是'最快'。
我用长字符串写了一个快速测试,运行了1000万次。
奥斯汀使用TrimEnd
的解决方案在4.649s运行
我的解决方案在1.927秒内运行
int j = given.Length - 1;
for (; j >= 0; j--)
{
char c = given[j];
if (c < '0' || c > '9')
{
break;
}
}
var first = given.Substring(0, j + 1);
var rest = given.Substring(j + 1);
请注意,我的构建不是调试(在调试中,我的解决方案速度较慢,但这是因为TrimEnd没有在调试位中运行)。 因此,如果您在应用程序中运行我的代码,并且正在构建调试,那么它将会变慢。
我喜欢linq。
var s = "B82V16814133260";
var lastNonNumeric = s.Reverse().Where(x => !char.IsDigit(x)).FirstOrDefault();
var index = s.LastIndexOf(lastNonNumeric);
var secondString = s.Substring(index + 1);
var firstString = s.Substring(0, index+1);
可能不是最好或最强大的解决方案,但它适用于您的测试字符串。
string Source = textBox13.Text;
for (i = Source.Length - 1; i >=0; i--)
{
if (! Char.IsNumber(Source[i])
break;
}
string leftString = Source.Left(i+1);
string rightString = Source.Right(i+1,Source.Length-i-1);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.