【问题标题】:Objective-c Line breaks every 23 characters without breaking wordsObjective-c 每 23 个字符换行而不断字
【发布时间】:2019-01-23 22:08:35
【问题描述】:

我从这篇帖子Objective-c Line breaks every 10 characters (Keeping words in tact) 中找到了这个算法,问题是它永远不会返回最后一个单词,它总是以某种方式丢弃它。

NSString *sourceStr = @"The Chocholate Experience in the Anna Ice Cream Museum - Spanish";

NSMutableString *resultString = [[NSMutableString alloc] init];
NSMutableString *currentLine = [[NSMutableString alloc] init];
NSMutableArray *stringsArray = [[NSMutableArray alloc] init];
NSScanner *scanner = [NSScanner scannerWithString:sourceStr];
NSString *scannedString = nil;

while ([scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString: &scannedString]) {
    if ([currentLine length] + [scannedString length] <= 23) {
        [currentLine appendFormat:@"%@ ", scannedString];
    }
    else if ([currentLine length] == 0) { // Newline but next word > 23
        [resultString appendFormat:@"%@\n", scannedString];
    }
    else { // Need to break line and start new one
        [resultString appendFormat:@"%@\n", currentLine];
        [currentLine setString:[NSString stringWithFormat:@"%@ ", scannedString]];
    }
    [scanner scanCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:NULL];
}
NSLog(@"Result String: \n%@", resultString);

I get this as the output: 
The Chocholate 
Experience in the Anna 
Ice Cream Museum -

去掉最后一个单词是西班牙语。任何人都可以看到错误?我已经在这几个小时了。任何帮助将不胜感激

【问题讨论】:

    标签: ios objective-c nsstring nsscanner


    【解决方案1】:

    如果您单步执行,您会注意到,当您在 while 循环之外时,您缺少的单词存储在 currentLine 变量中。基本上,最后一个 else 条件将“Ice Cream Museum -”附加到 resultString,但因为没有其他要扫描的内容(“Spanish”已保存在已扫描字符串中 - 所以它已经被扫描),它只是将当前行中的单词“Spanish”,并且不会通过 while 循环的另一次迭代(因此永远不会将它放在要打印的 resultString 中)。

    这是应该打印出最后一个单词的修改后的代码:

    NSString *sourceStr = @"The Chocholate Experience in the Anna Ice Cream Museum - Spanish";
    
    NSMutableString *resultString = [[NSMutableString alloc] init];
    NSMutableString *currentLine = [[NSMutableString alloc] init];
    NSMutableArray *stringsArray = [[NSMutableArray alloc] init];
    NSScanner *scanner = [NSScanner scannerWithString:sourceStr];
    NSString *scannedString = nil;
    
    while ([scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString: &scannedString]) {
    
        // keep appending as long as we have something to append to
        if ([currentLine length] + [scannedString length] <= 23) {
            [currentLine appendFormat:@"%@ ", scannedString];
        }
        else if ([currentLine length] == 0) { // Newline but next word > 23
            [resultString appendFormat:@"%@\n", scannedString];
        }
        else { // Need to break line and start new one
            [resultString appendFormat:@"%@\n", currentLine];
            [currentLine setString:[NSString stringWithFormat:@"%@ ", scannedString]];
        }
        [scanner scanCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString:NULL];
    }
    // we may have something left over that couldn't fit into the last line
    // that needs to be appended to the result string
    if (currentLine.length > 0) {
        [resultString appendFormat:@"%@\n", currentLine];
    }
    NSLog(@"Result String: \n%@", resultString);
    

    【讨论】:

    • 非常感谢!我怎么没看到。很有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多