Program Club

NSString을 설정된 길이로 자르려면 어떻게해야합니까?

proclub 2020. 11. 16. 22:21
반응형

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

반응형