【问题标题】:ios method to insert spaces in stringios方法在字符串中插入空格
【发布时间】:2012-08-21 12:32:42
【问题描述】:

在我的应用程序中,我从亚马逊的 s3 下载了一个文件,除非文件名中没有空格,否则该文件不起作用。例如,其中一个文件是“HoleByNature”。我想将其显示为“Hole By Nature”,即使文件名中仍然没有空格。

我正在考虑编写一种方法来搜索从第一个字符(不是第 0 个字符)开始的字符串,每次找到大写字母时,我都会创建一个带有子字符串的新字符串,直到该索引带有空格和子字符串直到剩下的。

所以我有两个问题。

  1. 如果我使用 NSString 的 characterAtIndex,我怎么知道那个字符是不是大写?
  2. 有没有更好的方法来做到这一点?

谢谢!

【问题讨论】:

    标签: iphone objective-c ios ipad nsstring


    【解决方案1】:

    适用于所有 unicode 大写和首字母大写字母

    - (NSString*) spaceUppercase:(NSString*) text {
        NSCharacterSet *set = [NSCharacterSet uppercaseLetterCharacterSet];
        NSMutableString *result = [NSMutableString new];
        for (int i = 0; i < [text length]; i++) {
            unichar c = [text characterAtIndex:i];
            if ([set characterIsMember:c] && i!=0){
                [result appendFormat:@" %C",c];
            } else {
                [result appendFormat:@"%C",c];
            }
        }   
        return result;
    }
    

    【讨论】:

    • 你知道你可以使用标准C函数isupper,对吧?
    • @Jano 我编辑了您的答案——如果您不喜欢它,请随时回滚
    • 嗯。这没有用。我把这个 NSLog(@"space method try: %@",[self spaceUppercase:@"HoleByNature"]);并得到了这个:2012-08-26 21:18:56.391 [9492:707] 空间方法尝试:HoleByNature
    • 似乎 characterIsMember 永远不会返回 YES。所以它没有找到匹配项?
    • 好的,使用 isupper 函数让它工作。感谢理查德 J. 罗斯三世。
    【解决方案2】:

    我不会采用这种方法,因为我知道您可以下载带空格的文件,请在构造 NSUrl 对象时尝试此方法 @"my_web_site_url\sub_domain\sub_folder\My%20File.txt

    这将从提供​​的 URL 下载“My File.txt”。所以基本上你可以用 %20 替换 URL 中的所有空格

    参考:

    http://www.w3schools.com/tags/ref_urlencode.asp

    【讨论】:

    • 哦,我确实注意到,每当我创建带有空格的路径的 URL 时,它会将 %20 放​​在任何有空格的地方!我一定会考虑解决这个问题。谢谢
    【解决方案3】:

    使用 Jano 的答案,但使用 Richard J. Ross III 建议的 isupper 函数。

    - (NSString*) spaceUppercase:(NSString*) text 
    {
        NSMutableString *result = [NSMutableString new];
        [result appendFormat:@"%C",[text characterAtIndex:0]];
        for (int i = 1; i < [text length]; i++) 
        {
             unichar c = [text characterAtIndex:i];
             if (isupper(c))
             {  
                 [result appendFormat:@" %C",c];
             } 
             else 
             {
                 [result appendFormat:@"%C",c];
             }
        }
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-10-22
      • 2015-07-06
      • 1970-01-01
      • 2013-02-03
      • 2020-05-16
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多