0

NSString から一部の文字をトリミングするのに苦労しています。テキストを含む既存のテキスト ビューがある場合、要件は次のとおりです。

  1. 先頭のスペースと改行を削除します (基本的に先頭の空白と改行は無視します)
  2. 最大 48 文字を新しい文字列にコピーするか、改行が検出されるまでコピーします。

コードを使用して、ここで別のSOの質問から最初の要件を実行できることがわかりました。

NSRange range = [textView.text rangeOfString:@"^\\s*" options:NSRegularExpressionSearch];
NSString *result = [textView.text stringByReplacingCharactersInRange:range withString:@""];

ただし、2番目の要件を実行するのに問題があります。ありがとうございました!

4

2 に答える 2

1

これはあなたがやろうとしていることをします。また、先頭の空白と改行をトリミングする簡単な方法です。

NSString *text = textView.text;

//remove any leading or trailing whitespace or line breaks
text = [text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

//find the the range of the first occuring line break, if any.
NSRange range = [text rangeOfString:@"\n"];

//if there is a line break, get a substring up to that line break
if(range.location != NSNotFound)
    text = [text substringToIndex:range.location];
//else if the string is larger than 48 characters, trim it
else if(text.length > 48)
    text = [text substringToIndex:48];
于 2012-10-22T02:42:53.600 に答える
1

これは機能するはずです。基本的には、テキストビューのテキスト内の文字をループして、現在表示されている文字が改行文字であるかどうかを確認します。また、まだ48文字に達しているかどうかもチェックします。文字が改行文字ではなく、まだ48文字に達していない場合は、結果文字列に文字を追加します。

NSString *resultString = [NSString string];
NSString *inputString = textView.text;

for(int currentCharacterIndex = 0; currentCharacterIndex < inputString.length; currentCharacterIndex++) {

    unichar currentCharacter = [inputString characterAtIndex:currentCharacterIndex];
    BOOL isLessThan48 = resultString.length < 48;
    BOOL isNewLine = (currentCharacter == '\n');

    //If the character isn't a new line and the the result string is less then 48 chars
    if(!isNewLine && isLessThan48) {

        //Adds the current character to the result string
        resultString = [resultString stringByAppendingFormat:[NSString stringWithFormat:@"%C", currentCharacter]];
    } 

    //If we've hit a new line or the string is 48 chars long, break out of the loop
    else {
        break;
    }
}
于 2012-10-22T02:44:03.860 に答える