如果我有一個字符串,我將加載到TextField中如何進行換行\ n每10個字符出現一次(包括空格和whatnot)但不能去中間詞的下一行......就像用最多10個字符來包裝文本一樣?但我不只是包裝在UITextField中,實際上我需要\ n的輸入,因爲它會用在別的東西上......(這對於iOS來說很重要)任何幫助都會被讚賞我真的被卡住了!Objective-c行間隔每10個字符(保持文字的完整)
回答
你可能想利用NSScanner的循環放在一起這樣的事情,而是要找出精確的算法你需要準確地闡明你怎麼想它的工作。下面是你需要回答的問題:
-
字與字之間不止一個空白的
- 是否應序列「坍塌」成一個單一的空白的文本換行的目的,還是應該連續5個空格的序列來計算作爲5個字符反對你每行10個字符?我會假設你想要多個空間被摺疊而不是保留
- 如果你有一個單詞大於10個字符,你希望它工作嗎?你是否希望它最後有一個大於10個字符的行,或者你希望插入換行符並在該情況下強制中間字符行中斷?我會假設你想讓超過10個字符的單詞超出10個字符的限制。
擁有約記住您的問題這些假設,我想這樣的代碼是:
NSMutableString *resultString = [[NSMutableString alloc] init];
NSMutableString *currentLine = [[NSMutableString alloc] init];
NSScanner *scanner = [NSScanner scannerWithString:sourceString];
NSString *scannedString = nil;
while ([scanner scanUpToCharactersFromSet:[NSCharacterSet whitespaceCharacterSet] intoString: &scannedString]) {
if ([currentLine length] + [scannedString length] <= 10) {
[currentLine appendFormat:@"%@ ", scannedString];
}
else if ([currentLine length] == 0) { // Newline but next word > 10
[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];
}
你必須自己插入換行符到你的字符串中,這個afaik沒有內置函數。
NSMutableString * guid = [NSMutableString stringWithString: @"Some suitably long string will be used for demonstration purposes"];
for(NSUInteger i = 10; i < [guid length] ; i += 10) {
[guid insertString:@"\n" atIndex: i];
}
NSLog(@"GUID: %@", guid);
這並不詞之間加休息。 – nycynik 2012-02-28 22:49:18
啊,錯過了那部分標題。 – Perception 2012-02-29 00:38:58
我願意做它的方式類似的東西一:
NSString *finalString = @"";
NSString *yourString = @"This is your very very long string with many words and letters and spaces, haha";
NSArray *someArray = [yourString componentsSeparatedByString:@" "]; //that will make an array with strings separated by spaces
for (int i = 0; i < [someArray count]; i++) {
NSArray *someArray2 = [finalString componentsSeparatedByString:@"\n"];
if ([[someArray objectAtIndex:i]length] + [[someArray2 lastObject]length] > 9)
finalString = [NSString stringWithFormat:@"%@\n%@", finalString, [someArray objectAtIndex:i]];
else
finalString = [NSString stringWithFormat:@"%@ %@", finalString, [someArray objectAtIndex:i]];
}
我相信,這樣的事情應該工作。我附近沒有一臺Mac,所以我用我的記憶寫下了這些(這並不總是完美無瑕)。所以代碼中可能會有一些錯誤。
希望它可以幫助
這是偉大的,但沒有任何案件的話長於10個字符 – nycynik 2012-02-28 22:49:34
我創造的東西,實際上沒有休息時間,而不是在每10個字符,但字與字之間,而不是有沒有斷字引擎存在,就需要一個字典,。我從Perceptions的答案構建它。
NSMutableString * guid = [NSMutableString stringWithString: @"Some suitably long string will be used for demonstration purposes"];
int lastSpace=0;
int lastbreak=0;
NSUInteger i = [guid length];
while(i > 0) {
if ([guid characterAtIndex:i-1]==' ')
lastSpace=i;
lastbreak++;
if (lastbreak>9) {
if (lastSpace!=0) {
[guid insertString:@"\n" atIndex: lastSpace];
} else {
// we have not found a space in 10 chars, so break where there is no space.
// no H&J engine here, so we can add the - or not.
[guid insertString:@"-\n" atIndex: i];
i++; // since were adding a character, dont skip a character.
}
lastbreak=0;
lastSpace=0;
}
i--;
}
很容易遵循! lastSpace變量!爲什麼我沒有想到;)謝謝! – 2012-02-29 00:05:38
等一下對不起,這個不行,就像我認爲的那樣,它會允許一行以上的10個以上的字符。我需要10作爲最大值。它需要更頻繁地換行 – 2012-02-29 00:07:43
隨着一些調整,我得到了它的工作(從頭開始計算「i」變量,並在空格結束時強制空格,而不是在下一個單詞結束時結束)謝謝! – 2012-02-29 00:18:59
- 1. 閱讀整個文件變量,保持逃脫完整字符
- 2. TextArea有10行,每行35個字符
- 3. 分割分隔字符串中的一列,並保持其他列的完整
- 4. 連字符之間的每個整數
- 5. 包含完整字符串分隔符的提取字符串
- 6. 在字符串中間隔每2個字符?
- 7. 將整數列表打印爲逗號分隔的數字列表,每行最多10個字符
- 8. 保持最大的10個數字
- 9. 輸出中每隔一個字符之間的NUL字節
- 10. PHP> echo字符串,每行3個字符分隔?
- 11. 分隔多個分隔符,同時保持分隔符爲字典鍵
- 12. sed的:分隔符之間單獨更換每個字符
- 13. 保持元素之間的文字字符串xml
- 14. Python:只保留字符串中的每個字符,每個都在換行
- 15. 兩個分隔符之間的字符
- 16. 提取每2000個字符的字符並保存文件
- 17. 解析字符串,給出的字符串之間保持所有比賽中(多字符分隔符)
- 18. 分裂根據字段分隔爲每行一個字符串
- 19. Java的:我想從一個文件,逐個字符閱讀,每個字符保存到具有10
- 20. CCLabelTTF字符間隔
- 21. 獲取每10個數字之間的第一個數字
- 22. 分隔字符串分隔符分裂成Scala中的每個字符
- 23. 分裂字符串,但保持內部字符串完好?
- 24. Javascript以字符行尾字符串分隔字符串並讀取每行
- 25. 熊貓保持最完整的行
- 26. 從另一個字典創建一個字典保持結構完整
- 27. 完整字符串與不完整字符串(或簡寫形式)之間的字符串匹配
- 28. 在每隔80個字符之前用最近的空白字符分隔換行文件char
- 29. 爆炸每隔一個點的字符字符
- 30. .split(「,」)分隔字符串的每個字符
這有效奇蹟!非常感謝!!! :) – 2012-02-29 00:21:50
我希望我能給雙倍upvotes這個。作爲IOS界新人,本來可能花了我一整天的時間來寫這篇文章,或許更多。 – Caimen 2012-11-13 19:08:26