【问题标题】:String Manipulation: More advanced substring字符串操作:更高级的子字符串
【发布时间】:2013-06-06 03:45:30
【问题描述】:

如何从下面的长字符串中提取“19”? 以下是我的做法,但我想知道,有没有比这更好/更快的方法?

NSString *myString = @"13.5 Points-(19) 38 Points-(50) 50 Points-(215) 4.3 Points-105.8 Points-21";
NSArray  *myArray  = [myString componentsSeparatedByString:@"-"];

NSString *splitString  = [myArray        objectAtIndex:1             ];
NSRange  range         = [splitString    rangeOfString:@")"          ];
NSString *newString    = [splitString substringToIndex:range.location];

NSString *newString2 = [newString stringByReplacingOccurrencesOfString:@"(" withString:@""];

NSLog(@"newString2: %@", newString2);

【问题讨论】:

    标签: ios objective-c nsstring substring


    【解决方案1】:

    当你想要的只是一小段原始字符串时,使用componentsSeparatedByString 是非常低效的。您不必要地解析整个字符串。

    解决方案实际上取决于字符串的格式。如果您想要始终位于第一对括号中的子字符串,那么使用rangeOfString 获取第一个( 和第一个) 会更有效。然后你提取两者之间的部分。

    示例(没有任何适当的错误检查):

    NSString *myString = @"13.5 Points-(19) 38 Points-(50) 50 Points-(215) 4.3 Points-105.8 Points-21";
    NSRange openRange = [myString rangeOfString:@"("];
    NSRange closeRange = [myString rangeOfString:@")"];
    
    NSRange resultRange = NSMakeRange(openRange.location + 1, closeRange.location - openRange.location - 1);
    NSString *result = [myString substringWithRange:resultRange];
    

    【讨论】:

      【解决方案2】:

      试试这个

      NSString *myString = @"13.5 Points-(19) 38 Points-(50) 50 Points-(215) 4.3 Points-105.8 Points-21";
      NSArray *strArr = [myString componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString: @"()"]];
      
      NSLog(@"myString..%@",[strArr objectAtIndex:1]);// myString..19 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-27
        • 2015-01-19
        • 1970-01-01
        • 2019-04-16
        • 1970-01-01
        • 1970-01-01
        • 2011-05-12
        相关资源
        最近更新 更多