Iphone 如何根据需要格式化字符串
我有三种类型的字符串,我想格式化该字符串以获得街道编号、街道名称和城市名称Iphone 如何根据需要格式化字符串,iphone,ios,nsstring,Iphone,Ios,Nsstring,我有三种类型的字符串,我想格式化该字符串以获得街道编号、街道名称和城市名称 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
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
我如何才能做到这一点或任何显示字符串格式的链接,而不是请建议的那样。是的,我在这里写的字符串只是我得到的字符串的一种格式,字符串每次都会更改。可能是第一个可以实现将地址字符串分解为不同变量的代码,例如
\u streetNum,\u streetName,_cityName
然后可以使用以下代码行格式化字符串
NSString* formattedString = [[NSString alloc] initWithFormat:@"street number : %@\nstreet name :%@\ncity name :%@",_streetNum,_streetName,_cityName];
试试这个:
NSArray *array = [yourString componentsSeparatedByString:@" "];
它将为您提供一个数组wsth,其中所有字符串由“”分隔 尝试以下方法并解析与该地址相关的响应
http://maps.googleapis.com/maps/api/geocode/json?address=34%20Ellis%20Street,%20San%20Francisco,+CA&sensor=true
希望它能帮助您。您需要使用正则表达式。看看这个:1)用以下内容分开:
NSArray *arrayOfComponents = [yourString componentsSeparatedByString:@","];
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:@""];
}
}
2) 最后一个组件将始终是您的城市名称
3) 然后用以下命令检查(最后一个-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) 如果它只有数字,那么第一个元素是你的街道号,只需通过附加其余元素来生成一个新字符串,以获得街道名称。否则,上一个数组中的过去(last-1)就是街道名称
这是基本思想,逻辑显然可以改进。
编辑:因为您提到这个字符串是由GoogleAPI提供的,这意味着您可能会得到一个JSON响应。您应该使用完整的JSON响应来填充文本字段。您可以使用一个JSON-to-NSDictionary类:请参见将地址字符串传递给此方法,然后将其转换为包含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]);
}
下面是一段可能对您有所帮助的代码
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:@""];
}
}
您可以根据您的需求扩展它的逻辑。如果它是唯一的格式,我们可以整理一些逻辑并实现它,但是每次它都会给出一些不正确的文本,我们需要静态地做这类事情。如果是固定格式,我们可以修复。抱歉@Madhu此字符串由google api返回,我必须在三个不同的文本视图中将此字符串显示为字符串中的文本。您可以使用:[yourstring substringFromIndex:0];[yourstring子字符串到索引:1];但这就是问题所在,我如何打破这个字符串,它给了我三种类型的字符串。它给出了错误,比如“下标要求接口'NSMutableArray'的大小,在非脆弱ABI中不是常数”。我在mac os x应用程序中使用上述代码,启用了ARC并且没有警告没有错误,这就是为什么我发布了…replace everywhere
arr[index]
到[arr objectAtIndex:index]
并尝试重新编码thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx,thanx..+1对于要转换的属性,您需要指定一次(再次查看我编辑的代码,因为我传递了一个长字符串并将其分解为数组),然后我通过将其附加到字符串来再次记录它。