NSString을 설정된 길이로 자르려면 어떻게해야합니까?
검색했지만 의외로 답을 찾지 못했습니다.
나는 오랫동안이 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];
약간 섬세한 것 같습니다 (끈이 최대 길이보다 짧으면 갈라짐). 또한 유니 코드가 안전한지 확실하지 않습니다. 더 나은 방법이 있습니까? 누구든지 이것에 대한 좋은 카테고리가 있습니까?
실제로 많은 문자가 제안 된 답변에서 고려하지 않는 유니 코드로 결합되므로 "유니 코드 안전"이라는 부분은 죽었습니다.
예를 들어, é를 입력하려면. 한 가지 방법은 "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];
이렇게하면 범위가 초기 범위 길이보다 길 수 있습니다. 위의 카페 예에서는 4 개의 "글리프"가 있어도 범위가 5의 길이로 확장됩니다. 표시 한 길이보다 길이가 절대적으로 짧아야한다면이를 확인해야합니다.
이 답변은 실제로이 목록에 없기 때문에 가장 간단하고 현명한 한 줄입니다.
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;
더 짧은 솔루션은 다음과 같습니다.
NSString *shortString = ([myString length]>MINLENGTH ? [myString substringToIndex:MINLENGTH] : myString);
약간 섬세 해 보입니다 (줄이 최대 길이보다 짧으면 갈라짐)
그럼 그 부분을 고치면 어떨까요?
NSRange stringRange = {0, MIN([myString length], 20)};
삼항 연산을 사용할 수 있습니다.
NSString *shortString = (stringRange.length <= [myString length]) ? myString : [myString substringWithRange:stringRange];
또는 최종 결과를 더 잘 제어하려면 :
if (stringRange.length > [myString length])
// throw exception, ignore error, or set shortString to myString
else
shortString = [myString substringWithRange:stringRange];
스위프트 4
let trimToCharacter = 20
let shortString = String(myString.prefix(trimToCharacter))
행복한 코딩.
//Short the string if string more than 45 chars
if([self.tableCellNames[indexPath.section] length] > 40) {
// define the range you're interested in
NSRange stringRange = {0, MIN([self.tableCellNames[indexPath.section] length], 40)};
// adjust the range to include dependent chars
stringRange = [self.tableCellNames[indexPath.section]
rangeOfComposedCharacterSequencesForRange:stringRange];
// Now you can create the short string
NSString *shortStringTitle = [self.tableCellNames[indexPath.section] substringWithRange:stringRange];
shortStringTitle = [shortStringTitle stringByAppendingString:@"..."];
titleLabel.text = shortStringTitle;
} else {
titleLabel.text = self.tableCellNames[indexPath.section];
}
// VKJ
가장 간단하고 멋진 솔루션 (텍스트 끝에 3 개의 점이 있음) :
NSString *newText = [text length] > intTextLimit ?
[[text substringToIndex:intTextLimit] stringByAppendingString:@"..."] :
text;
NSString은 본질적으로 내부적으로 unichar 배열이므로 모든 NSString 작업은 유니 코드에 안전합니다. 문자열이 다른 인코딩으로되어 있어도 표시 될 때 지정된 인코딩으로 변환됩니다.
최종 사용에서 자르려면 다음을 수행하십시오.
[fileName substringToIndex:anyNumber];
처음부터 자르려면 :
[fileName substringFromIndex:anyNumber];
참고 URL : https://stackoverflow.com/questions/2952298/how-can-i-truncate-an-nsstring-to-a-set-length
'Program Club' 카테고리의 다른 글
| C ++ 게터 / 세터 코딩 스타일 (0) | 2020.11.16 |
|---|---|
| 루비에서 문자열을 숫자와 연결 (0) | 2020.11.16 |
| Ruby-문자열에서 일부 문자를 선택하는 방법 (0) | 2020.11.16 |
| ScrollView 내에서 스크롤 할 수없는 ListView (0) | 2020.11.16 |
| ASP.NET에 대한 이메일 주소 유효성 검사 (0) | 2020.11.16 |