【问题标题】:Remove part of a string before the first forward slash在第一个正斜杠之前删除部分字符串
【发布时间】:2017-10-11 10:09:41
【问题描述】:

我有一个字符串

NSString *str = @"xyz/en/ABOUT/hello";

我需要删除第一个斜杠之前的所有字符。

我的输出应该是这样的:

"/zh/关于/你好"

但我不能简单地替换@"xyz",因为第一个斜杠之前的内容是动态的。

【问题讨论】:

  • rangeOfString: 应该会帮你找到第一个/,然后使用rangeFound.location != NSNotFound,你可以使用substringFromIndex:
  • 好的,谢谢。我会试试的
  • 我找到了另一种方式 NSArray *strArray = [urlString componentsSeparatedByString:@"/"]; urlString = [urlString stringByReplacingOccurrencesOfString:strArray[0] withString:@""];
  • 如果str = @"en/en/ABOUT/hello",它不应该工作。 stringByReplacingOccurrencesOfString 将替换每个给出的结果 @"//ABOUT/hello
  • @Larme 是的,谢谢

标签: objective-c string cocoa cocoa-touch nsstring


【解决方案1】:

Objective-C

NSString *str = @"xyz/en/ABOUT/hello";
NSUInteger index = [str rangeOfString:@"/"].location;
NSString *myString = [str substringFromIndex:index];
NSLog(@"final string: %@", myString);    // final string:  /en/ABOUT/hello

Swift3

let str = "xyz/en/ABOUT/hello"
let index = str.range(of: "/")?.lowerBound
let myString: String? = str.substring(from: index!)
print("final string: ", myString!)   // final string:  /en/ABOUT/hello

【讨论】:

    【解决方案2】:

    先拆分字符串:

    NSArray *array1 = [str componentsSeparatedByString:@"/"]
    

    然后加入字符串:

    NSString *joinedString = [[array1 subarrayWithRange:NSMakeRange(1, [array1 count] - 1)] componentsJoinedByString:@"/"];
    

    把第一个'/'加回来

    joinedString = [@"/" stringByAppendingString:joinedString]
    

    应该有一个regex 的方式来做到这一点,但除非必须,否则很少使用它。

    【讨论】:

    • 范围无效,所以subarrayWithRange: 应该会崩溃。
    • @armnotstrong - /en/ 怎么样,但你的加入字符串返回 en/
    • 我以另一种方式做到了,它的工作 NSArray *strArray = [urlString componentsSeparatedByString:@"/"]; urlString = [urlString stringByReplacingOccurrencesOfString:strArray[0] withString:@""];
    • @user6788419 如果第一个模式出现多次怎么办?
    • @armnotstrong 是的,我明白了
    【解决方案3】:

    看起来您正在使用文件路径。所以,使用路径操作方法:

    @implementation NSString (MorePaths)
    
    - (NSString *)WSSDroppingFirstRelativePathComponent
    {
        NSArray * trailingComponents = [[self pathComponents] WSSDroppingFirst];
        return [NSString pathWithComponents:trailingComponents];
    }
    
    @end
    
    @implementation NSArray (Dropping)
    
    - (NSArray *)WSSDroppingFirst
    {
        NSRange trailingRange = NSMakeRange(1, [self count] - 1);
        return [self subarrayWithRange:trailingRange];
    }
    
    @end
    

    如果这实际上是一个 URL,请在 NSURL 而不是 NSString 上创建类别。

    【讨论】:

      猜你喜欢
      • 2015-06-21
      • 1970-01-01
      • 2012-07-18
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多