我正在使用C#,我有很多包含地址的字符串,例如:
10 Downing Street Birch Lane 7 Palm Creek 8 Street 84 Chancellor Place Battle on the Somme 56
等等。
我需要将这些字符串拆分为数字部分(例如“10”或“7”)和文本部分(例如“Downing street”或“Birch Lane”)。
哦,我被要求不要使用RegEx。
我已经尝试过将它们分割成这样的空格:
string s ="84 Chancellor place";
string [] words = s.Split(' ');
问题是(当然)它不会以相同的方式拆分所有字符串,所以我不能总是从文本的其余部分中排除数字(我不总是知道数字是在单词中[例如,0和文本部分在不同的单元格中,而不是融合在一起)。
我非常感谢您帮助找到提取数字的方法。
修改: 每个例子中的期望输出:
string1=10 string2=Downing Street
string1=7 string2=Birch Lane
string1=8 string2=Palm Creek Street
string1=84 string2=Chancellor Place
string1=56 string2=Battle on the Somme
答案 0 :(得分:1)
您可以使用此循环在List<Address>
和string.Split
的帮助下初始化int.TryParse
:
List<Address> addresses = new List<Address>();
foreach (string str in strings)
{
Address addr = new Address();
addresses.Add(addr);
int num, numIndex = int.MinValue;
string[] tokens = str.Split(new[]{' '}, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < tokens.Length; i++)
{
if (int.TryParse(tokens[i], out num))
{
addr.Number = num;
numIndex = i;
break;
}
}
if (addr.Number.HasValue)
{
// join the rest with white-spaces to the street name skipping the number
addr.Street = string.Join(" ", tokens.Where((s, i) => i != numIndex));
}
else
{
addr.Street = str;
}
}
使用这个小班:
class Address
{
public int Number { get; set; }
public string Street { get; set; }
}
免责声明:请注意,如果输入是任意的,则根本不是故障安全的。世界上有许多街道也包含数字,还有chars
的数字,如“17a”。