2

我在 C# 中工作,我有很多包含地址的字符串,例如:

10 Downing Street
Birch Lane 7 
Palm Creek 8 Street
84 Chancellor Place
Battle on the Somme 56

等等。

我需要将这些字符串拆分为数字部分(例如“10”或“7”)和文本部分(例如“唐宁街”或“Birch Lane”)。

哦,我被要求不要使用 RegEx。

我已经尝试将它们拆分为这样的空间:

string s ="84 Chancellor place";
string [] words = s.Split(' ');

问题是(当然)它不会以相同的方式拆分所有字符串,所以我不能总是从文本的其余部分中排除数字(我并不总是知道数字是以 words[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
4

1 回答 1

1

您可以使用此循环在andList<Address>的帮助下初始化 a :string.Splitint.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”这样的数字。

于 2013-01-01T13:46:19.167 回答