0

3 種類の文字列があり、その文字列を書式設定して、番地、通り名、都市名を取得したいと考えています。

The first type is : 34 Ellis Street, San Francisco
Here i want to make it like 
street number : 34
street name : Ellis Street
city name : San Francisco


The second type is : 4FL, 800 Market Street, San Francisco
Here i want to delete 4FL, 
And i want to make it like 
street number : 800
street name : Market Street
city name : San Francisco

The third type is : Ellis & Market, San Francisco
Here i want to make it like 
street number : 
street name : Ellis & Market
city name : San Francisco

どうすればこれを行うことができますか、またはこのような文字列フォーマットを示すリンクは提案してください。はい、ここに書いた文字列は取得した文字列のフォーマットにすぎません。文字列は毎回変更されます。

4

7 に答える 7

1

住所文字列がこのメソッドに渡され、streetNumber、streetName、cityName を含む 3 つの文字列オブジェクトを持つ配列に変換されます。次に、配列が呼び出し元に返されます。

-(NSArray *)brakeAddress:(NSString *)address{

     NSMutableArray *arr=[NSMutableArray arrayWithArray:[address componentsSeparatedByString:@","]];

     if (arr.count>2) {
     [arr removeObjectAtIndex:0];
     }

     NSInteger streetNameInd=[arr count]-2, cityNameInd=[arr count]-1;

     NSMutableArray *streetNameArray=[NSMutableArray arrayWithObjects:arr[0], nil];

     if ([arr[streetNameInd] intValue]) {

     streetNameArray=[NSMutableArray arrayWithArray:([arr[streetNameInd] componentsSeparatedByString:@" "])];

     [streetNameArray removeObjectAtIndex:0];
     if ([streetNameArray[0] intValue] ==[arr[streetNameInd] intValue]) {
     [streetNameArray removeObjectAtIndex:0];
     }
     }

     NSString *streetName=[streetNameArray componentsJoinedByString:@" "];

     NSString *streetNumber=@"";
     if ([arr[streetNameInd] intValue]!=0) {
     streetNumber=[NSString stringWithFormat:@"%d", [arr[streetNameInd] intValue]];
     }

    NSString *city=arr[cityNameInd];
    // NSLog(@"\nstreet number :%@\nstreet name  :%@\ncity name :%@",streetNumber, streetName,city);

    NSArray *addressParts=[NSArray arrayWithObjects:streetNumber, streetName, city, nil];

    return addressParts;
}

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{

    NSString *str1=@"34 Ellis Street, San Francisco";
    NSString *str2=@"4FL, 800 Market Street, San Francisco";
    NSString *str3=@"Ellis & Market, San Francisco";

    NSArray *firstAddress=[self brakeAddress:str1];
    NSArray *secondAddress=[self brakeAddress:str2];
    NSArray *thirdAddress=[self brakeAddress:str3];

    NSLog(@"\n1st : street number :%@\nstreet name  :%@\ncity name :%@",firstAddress[0],firstAddress[1],firstAddress[2]);
    NSLog(@"\n2nd : street number :%@\nstreet name  :%@\ncity name :%@",secondAddress[0],secondAddress[1],secondAddress[2]);
    NSLog(@"\n3rd : street number :%@\nstreet name  :%@\ncity name :%@",thirdAddress[0],thirdAddress[1],thirdAddress[2]);


}
于 2013-01-25T08:35:02.003 に答える
1

1) 以下で区切る:

NSArray *arrayOfComponents = [yourString componentsSeparatedByString:@","];

2) 最後のコンポーネントは常に都市名になります

3)次に、(Last - 1)コンポーネントをチェックします

NSArray *array = [yourString componentsSeparatedByString:@" "];

2)配列の最初の要素を取り、これを使用します

NSCharacterSet* notDigits = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
if ([newString rangeOfCharacterFromSet:notDigits].location == NSNotFound)
{
    // newString consists only of the digits 0 through 9
}

3) 数字しかない場合、最初の要素は通りの番号であり、残りの要素を追加して新しい文字列を作成し、通りの名前を取得します。それ以外の場合は、前の配列の過去 (最後の -1) が通りの名前です。

これは基本的な考え方であり、ロジックは明らかに改善できます。

編集: この文字列は google api によって提供されると述べたので、おそらく JSON 応答を取得していることを意味します。テキストフィールドに入力するには、完全な JSON 応答を使用する必要があります。使用できる NSDictionary クラスへの JSON があります。こちらを参照してください。

于 2013-01-25T08:27:14.263 に答える
0

これを試して:

NSArray *array = [yourString componentsSeparatedByString:@" "];

「」で区切られたすべての文字列の配列を提供します。

于 2013-01-25T07:58:54.463 に答える
0

最初に、アドレス文字列をさまざまな変数に分割するコードを実装できます_streetNum,_streetName,_cityName。次に、次のコード行を使用して文字列をフォーマットできます

NSString* formattedString = [[NSString alloc] initWithFormat:@"street number : %@\nstreet name :%@\ncity name :%@",_streetNum,_streetName,_cityName];
于 2013-01-25T07:49:40.480 に答える
0

次の方法で試して、そのアドレスに関連して必要なものは何でも応答を解析します

http://maps.googleapis.com/maps/api/geocode/json?address=34%20Ellis%20Street,%20San%20Francisco,+CA&sensor=true

それがあなたを助けることを願っています。

于 2013-01-25T08:03:46.727 に答える
0

正規表現を使用する必要があります。これを見てください:正規表現

于 2013-01-25T08:09:18.693 に答える
0

これはあなたを助けるかもしれないコードです。

NSString *addressString;
NSArray *tempArray = [addressString componentsSeparatedByString:@", "];
if([tempArray count]==3){
    city = [tempArray objectAtIndex:2];
    NSString *tempString = [tempArray objectAtIndex:1];

    NSArray *temp1Array = [tempString componentsSeparatedByString:@" "];
    if ([temp1Array count]>1) {
        st_num = [tempArray objectAtIndex:0];
        st_name = [tempString stringByReplacingOccurrencesOfString:
                             [NSString stringWithFormat:@"%@ ",st_num] withString:@""];
    }
}

要件に合わせてロジックを拡張できます。

于 2013-01-25T09:20:51.140 に答える