ios方法在字符串中插入空格

时间:2012-08-27 00:00:40

标签: iphone objective-c ios ipad nsstring

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

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

所以我有两个问题。

  1. 如果我使用NSString的characterAtIndex,我如何知道该字符是否为大写?
  2. 有更好的方法吗?
  3. 谢谢!

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:2)

我不会去那种方法,因为我知道你可以下载带空格的文件请在构建NSUrl对象时试试这个 @“my_web_site_url \ sub_domain \ sub_folder \我%20File.txt

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

参考:

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

答案 2 :(得分:2)

我遇到了类似的问题,我有一个数组,其中包含我想在UITableView中显示的标签列表,每行一个标签。

我的问题是我用SOAP操作返回的XML解析了这些标签,我不知道字符串的格式。

首先,我实现了一个方法,它只是找到了大写字母并在其前面留了一个空格。这很棒,但是这些标签中的一些以大写字母开头,一些以驼峰形式开头(例如某些字符串exampleLabel而其他字符串ExampleLabel。所以这意味着以大写字母开头的那些字母已插入空格在字符串前面。

我通过使用NSString的stringByTrimmingCharactersInSet修剪字符串的开头和结尾处的空格来克服这个问题。

下一个问题是使用的任何缩写,例如“ID”或“PNR状态”,其中显示为“ID”和“PNR状态”作为大写字母,并且非常正确地被拾取和空格插在它之前。

我通过在我的新方法中实现正则表达式克服了这个问题。

这是我完成的解决方案:

- (NSString *)formatLabel:(NSString *)label
{
    NSMutableString *str2 = [NSMutableString string];

    for (NSInteger i=0; i<label.length; i++){
        NSString *ch = [label substringWithRange:NSMakeRange(i, 1)];
        if ([ch rangeOfCharacterFromSet:[NSCharacterSet uppercaseLetterCharacterSet]].location != NSNotFound) {
            [str2 appendString:@" "];
        }
        [str2 appendString:ch];
    }
    NSString * formattedString = [str2 stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]].capitalizedString;

    formattedString = [formattedString stringByReplacingOccurrencesOfString:@"([A-Z]) (?![A-Z][a-z])" withString:@"$1" options:NSRegularExpressionSearch range:NSMakeRange(0, formattedString.length)];

    return formattedString;
}
然后我会简单地调用这样的东西,例如,它会返回格式很好的字符串:

NSString * formattedLabel = [self formatLabel:@"PNRStatus"];
NSLog(@"Formatted Label: %@", formattedLabel);

将输出:

2013-10-10 10:44:39.888测试项目[28296:a0b]格式化标签:PNR状态

答案 3 :(得分: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;
}