형식 문자열을 사용하여 nsstrings를 숫자처럼 정렬 할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/1671531

  •  13-09-2019
  •  | 
  •  

문제

사용 중입니다 nslog () an으로 구성된 일부 표 데이터를 인쇄합니다 nsstring 그리고 관련된 정수.

내가 가장 긴 단어의 길이를 알고 있다고 가정합니다.

사용 방법이 있습니까? 형식 문자열 이런 종류의 열 정렬을 얻으려면 :

word:tree        rank:5  
word:frog        rank:3  
word:house       rank:2  
word:peppercorn  rank:2  
word:sword       rank:2  
word:antlion     rank:1  

내가 서식 문자열에 대해 묻는 이유는 빈민가 디버깅 출력을 형식화하는 가벼운 방법을 기대하기 때문입니다.

내가 시도한 내용은 다음과 같습니다.

NSString *word = @"tree";
NSUInteger rank = 4;
NSString *str = [NSString stringWithFormat:@"word:%-20@ rank:%u", word, rank];
NSLog(@"%@", str);

결과:

단어 : 나무 순위 : 4

전혀 효과가 없습니다.

도움이 되었습니까?

해결책

다음은 작동하는 것처럼 보이지만 NSSTRING에서 C- 스트링으로 변환해야합니다.

NSString *word = @"tree";
NSUInteger rank = 4;
NSString *str = [NSString stringWithFormat:@"word:%-20s rank:%u", [word UTF8String], rank];
NSLog(@"%@", str);

NSString을 사용하려고 할 때 필드 너비가 왜 무시되는지 모르겠습니다.

다른 팁

예, 그냥 좋아요 printf.

에 따르면 문서, stringWithFormat: IEEE를 순종합니다 printf 개별 인수에 대한 모든 종류의 수정을 허용하는 사양. 문서에는 해당 정보의 제한된 하위 집합이 있지만 오픈 그룹 printf 유닉스 사양 전체 정보를 제공하려면 (읽을 가치가 있으면, 형식 지정자로 많은 트릭을 달성 할 수 있습니다).

위에 붙여 넣은 내용을 얻으려면 이것을 시도하십시오.

NSString *word = @"butterfly";
NSUInteger rank = 4;
NSString *str = [NSString stringWithFormat:@"word:%-11s rank:%u", [word UTF8String], rank];

다음은 디버깅 출력을 형식화하는 방법의 예입니다 (사용하지 않습니다. NSLog, 파일과 줄을 얻기 위해 인쇄를 표준 오류로 랩핑합니다) :

fprintf(stderr, "%s | %30s:%-5d | %s", [[[NSDate date] description] UTF8String],
    [fileName UTF8String], line, [body UTF8String]);

이전 답변과 같은 일을한다면 :

NSString *word = @"tree";
NSUInteger rank = 4;
NSString *str = [NSString stringWithFormat:@"word:%-20s rank:%u", [word UTF8String], rank];
NSLog(@"%@", str);

... ASCII가 아닌 문자에 대한 인코딩-수정 문제를 얻을 수 있습니다 ... StringWithFormat은 시스템 기본 인코딩을 가정하는 것 같습니다. stdlib 레벨로 떨어질 수 있습니다. sprintf 자신의 버퍼로, 그로부터 nsstring을 만들 때 인코딩을 제어 할 수 있습니다. 그러나 그것은 번거 롭습니다. 편리한 해결 방법을 알고 있다면 나는 모두 귀입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top