2

私は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(' ');

問題は、(もちろん)すべての文字列を同じように分割するわけではないため、残りのテキストから数字を常に除外できるとは限らないことです(数字が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

このループを使用して、 と を使用して を初期化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」のような数字もある。

于 2013-01-01T13:46:19.167 に答える