1

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

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

所以我有两个问题。

  1. 如果我使用 NSString 的 characterAtIndex,我怎么知道那个字符是否是大写的?
  2. 有一个更好的方法吗?

谢谢!

4

3 回答 3

4

适用于所有 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;
}
于 2012-08-27T00:11:19.597 回答
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

于 2012-08-27T00:40:27.930 回答
0

得到它与 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;
}
于 2012-08-27T01:32:01.237 回答