在将字符串拆分为2个部分以便从第一个数字中进行调整时遇到一些麻烦。它目前正在分裂第一个空间,但这不会长期工作,因为城市也有空间。
当前代码:
var string = "Chicago 1234 Anytown, NY"
var commands = parameters.Split(new[] { ' ' }, 2);
var originCity = commands[0];
var destination = commands[1];
这对于一个只有一个名字的城市来说非常有用,但我打破了:
var string = "Los Angeles 1234 Anytown, NY"
我尝试了几种不同的方法,但我还没有能够解决这些问题。关于能够返回2个字符串的任何想法如下:
originCity = Los Angeles
destination = 1234 Anytown, NY
答案 0 :(得分:3)
您无法使用.Split()
。
相反,您需要找到第一个数字的索引。您可以将.indexOfAny()
与数组(技术上为char[]
数组)一起使用来执行此操作。
int numberIndex = address.IndexOfAny("0123456789".ToCharArray())
然后你可以捕获两个substrings;一个在索引之前,另一个在之后。
string before = line.Substring(0, numberIndex);
string after = line.Substring(numberIndex);
答案 1 :(得分:1)
您可以使用正则表达式。在下面,匹配是正则表达式结果中的第一个匹配。
var match = Regex.Match(s, "[0-9]");
if (match.Success)
{
int index = match.Index;
originCity = s.Substring(0, index);
destination = s.Substring(index, s.Length - index);
}
或者你可以自己做:
int index = 0;
foreach (char c in s)
{
int result;
if (int.TryParse(c, out result))
{
index = result;
break;
}
//or if (char.IsDigit()) { index = int.Parse(c); break; }
}
...
答案 2 :(得分:-1)
你应该看看使用正则表达式是否会在这里做你需要的。至少使用您显示的样本数据,表达式为:
(\D+)(\d+)(\D+)
将结果分组为非数字字符,直到第一个数字字符,数字字符,直到遇到非数字,然后是其余的非数字字符。以下是它在代码中的使用方式:
var pattern = @"(\D+)(\d+)(\D+)";
var input = "Los Angeles 1234 Anytown, NY";
var result = Regex.Match(input, pattern);
var city = result.Groups[1];
var destination = $"{result.Groups[2]} {result.Groups[3]}";
这种情况在加利福尼亚州29 Palms或者数字包含逗号,小数等情况下会分崩离析,所以它肯定不是银弹,但我不知道你的数据,这对于这样一个简单的解决方案可能没问题