nev*_*ing 65 string iphone cocoa objective-c
我搜索过,但令人惊讶的是找不到答案.
我有很长一段路NSString要想缩短.我希望最大长度大约为20个字符.我在某处读到了最好的解决方案substringWithRange.这是截断字符串的最佳方法吗?
NSRange stringRange = {0,20};
NSString *myString = @"This is a string, it's a very long string, it's a very long string indeed";
NSString *shortString = [myString substringWithRange:stringRange];
Run Code Online (Sandbox Code Playgroud)
它似乎有点微妙(如果字符串短于最大长度则崩溃).我也不确定它是否是Unicode安全的.有没有更好的方法呢?有没有人有这个很好的类别?
moh*_*enr 120
实际上关于"Unicode安全"的部分已经死了,因为许多字符组合在unicode中,建议的答案不考虑.
例如,如果要键入é.一种方法是键入"e"(0x65)+组合重音""(0x301).现在,如果您输入这样的"café"并截断4个字符,您将获得"cafe".这可能会在某些地方引起问题.
如果你不关心这个,其他答案也可以.否则,这样做:
// define the range you're interested in
NSRange stringRange = {0, MIN([myString length], 20)};
// adjust the range to include dependent chars
stringRange = [myString rangeOfComposedCharacterSequencesForRange:stringRange];
// Now you can create the short string
NSString *shortString = [myString substringWithRange:stringRange];
Run Code Online (Sandbox Code Playgroud)
请注意,这样您的范围可能会比初始范围长度长.在上面的咖啡馆示例中,即使您仍然有4个"字形",您的范围也将扩展到5的长度.如果您的绝对长度必须小于您指定的长度,则需要检查这一点.
Md.*_*san 15
let trimToCharacter = 20
let shortString = String(myString.prefix(trimToCharacter))
Run Code Online (Sandbox Code Playgroud)
快乐编码。
bra*_*ipt 14
由于这个答案实际上并不在这个列表中,所以最简单,最明智的单行:
NSString *myString = @"This is a string, it's a very long string, it's a very long string indeed";
myString = (myString.length > 20) ? [myString substringToIndex:20] : myString;
Run Code Online (Sandbox Code Playgroud)
小智 11
更短的解决方案是:
NSString *shortString = ([myString length]>MINLENGTH ? [myString substringToIndex:MINLENGTH] : myString);
Run Code Online (Sandbox Code Playgroud)
看起来有点微妙(如果字符串短于最大长度则崩溃)
那为什么不解决这部分呢?
NSRange stringRange = {0, MIN([myString length], 20)};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31058 次 |
| 最近记录: |