2015-12-26 18 views
-1

我有一個很難從以下字符串中提取的緯度和經度子+ 25.1870 + 055.2784/從以下字符串+ 25.1870 + 055.2784/

由於這是一個位置字符串中提取的緯度和經度子,+號可能是 - 。我正在尋找一種方法來識別+或 - 符號,並在第二個+/- 符號的開始處創建第一個字符串,並在/處創建第二個字符串。

我已經在下面發佈了我的方法。它完美的工作,但我覺得它有點複雜。

NSString *itemValue = [NSString stringWithFormat:@"%@",item.value]; 
     NSLog(@"ITEM VALUE = %@", itemValue); 

     NSString *firstSign = [itemValue substringToIndex:1]; 
     NSLog(@"FIRST SIGN = %@", firstSign); 

     NSString *stringExcludingFirstSign = [itemValue substringWithRange:NSMakeRange(1, itemValue.length - 1)]; 

     NSLog(@"STRING EXCLUDING FIRST SIGN = %@", stringExcludingFirstSign); 

     NSString *latitudeWithoutSign; 

     NSScanner *scanner = [NSScanner scannerWithString:stringExcludingFirstSign]; 

     if([stringExcludingFirstSign containsString:@"+"]){ 
      [scanner scanUpToString:@"+" intoString:&latitudeWithoutSign]; 
     } 
     else if([stringExcludingFirstSign containsString:@"-"]){ 
      [scanner scanUpToString:@"-" intoString:&latitudeWithoutSign]; 
     } 

     NSLog(@"LATITUDE WITHOUT SIGN = %@", latitudeWithoutSign); 

     NSString *latitude = [NSString stringWithFormat:@"%@%@", firstSign, latitudeWithoutSign]; 

     NSLog(@"LATITUDE = %@", latitude); 

     NSString *longitude = [itemValue substringWithRange:NSMakeRange(scanner.scanLocation + 1, (itemValue.length - (scanner.scanLocation + 1)) - 1)]; 

     NSLog(@"LONGITUDE = %@", longitude); 
+0

您是否嘗試過'NSScanner'? – Wain

+0

到目前爲止你有嘗試過什麼嗎? – luk2302

+0

我試過NSScanner,但不確定如何在第二個符號到達時停止掃描。 – user1752054

回答

1

與您的字符串的問題是,你沒有任何分離,將指明緯度/經度。所以這就是我如何解決這個問題。

  • 你需要做的是首先從字符串中刪除反斜槓。也是沒有用處的
  • 下一頁取代所有+或 - 在他們前面的空間
  • 由於將在您需要刪除
  • 一旦現在做字符串的很前面的空間你使用由字符串函數分隔的組件來分隔出您的long long & lat。
  • lat和long在數組中。讓他們做任何你想要與他們

這裏是我已經測試

NSString *myCordStr = @"+25.1870+055.2784/"; 
    myCordStr=[myCordStr stringByReplacingOccurrencesOfString:@"/" withString:@""]; 
    myCordStr=[myCordStr stringByReplacingOccurrencesOfString:@"-" withString:@" -"]; 
    myCordStr=[myCordStr stringByReplacingOccurrencesOfString:@"+" withString:@" +"]; 

    NSString *newCordStr = [myCordStr substringFromIndex:1]; 

    NSLog(@"myCordStr:%@ ...", myCordStr); 
    NSLog(@"newCordStr:%@ ...", newCordStr); 

    NSArray *coordArray = [newCordStr componentsSeparatedByString:@" "]; 
    NSLog(@"coordArray: %@ ...", coordArray); 

OUTPUT: 
myCordStr: +25.1870 +055.2784 ... 
newCordStr:+25.1870 +055.2784 ... 
coordArray: (
    "+25.1870", 
    "+055.2784" 
) ... 
0

雖然這是一個有點複雜,下面的代碼是卓有成效的工作代碼。 NSString * itemValue = [NSString stringWithFormat:@「%@」,item.value];};}}; NSLog(@「ITEM VALUE =%@」,itemValue);

NSString *firstSign = [itemValue substringToIndex:1]; 
    NSLog(@"FIRST SIGN = %@", firstSign); 

    NSString *stringExcludingFirstSign = [itemValue substringWithRange:NSMakeRange(1, itemValue.length - 1)]; 

    NSLog(@"STRING EXCLUDING FIRST SIGN = %@", stringExcludingFirstSign); 

    NSString *latitudeWithoutSign; 

    NSScanner *scanner = [NSScanner scannerWithString:stringExcludingFirstSign]; 

    if([stringExcludingFirstSign containsString:@"+"]){ 
     [scanner scanUpToString:@"+" intoString:&latitudeWithoutSign]; 
    } 
    else if([stringExcludingFirstSign containsString:@"-"]){ 
     [scanner scanUpToString:@"-" intoString:&latitudeWithoutSign]; 
    } 

    NSLog(@"LATITUDE WITHOUT SIGN = %@", latitudeWithoutSign); 

    NSString *latitude = [NSString stringWithFormat:@"%@%@", firstSign, latitudeWithoutSign]; 

    NSLog(@"LATITUDE = %@", latitude); 

    NSString *longitude = [itemValue substringWithRange:NSMakeRange(scanner.scanLocation + 1, (itemValue.length - (scanner.scanLocation + 1)) - 1)]; 

    NSLog(@"LONGITUDE = %@", longitude); 
0

您可以使用NSRegularExpression然後使用matchesInString:options:range獲得兩個座標的數組。

正則表達式是(+|-)\d+\.\d+

全碼:

NSString *string = @"+25.1870+055.2784" 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(+|-)\d+\.\d+" options:nil error:nil] 
NSArray *result = [regex matchesInString:string options:nil range:NSMakeRange(0, string.length)]