4

UIWebViewで使用するために、(データベースから取得したテキストで)すでに存在する標準の上部二重引用符""をドイツ語テキストの特定の引用符に置き換える必要があります。引用符で囲まれた単語(すべての偶数のインデックス)の前の最初の二重引用符は、HTMLに相当する「」に置き換える必要があり„ます“。引用符はテキストのどこにあってもかまいません。そのため、固定位置に依存することはできません。

だから基本的に私はこのようなNSStringを持っています:

「いくつかの」テキストといくつかの「より多くの」テキスト

またはObjective-Cの場合:

NSString *str = @"just \"some\" text with some \"more\" text";

NSStringのstringByReplacingOccurrencesOfStringメソッドを知っていますが、もちろん、これはすべての二重引用符を下の二重引用符で置き換えるだけです。

NSString *newStr = [str stringByReplacingOccurrencesOfString:@"\"" withString:@"„"];

1秒ごとまたはn回ごとに置き換える方法が見つかりませんでした。誰かがそれを達成するためのヒント/アイデアを持っていますか?

どうもありがとう

4

4 に答える 4

2

NSScanner別のオプションを提供しています...

NSScanner *scanner = [NSScanner scannerWithString:englishString];
NSMutableString *germanString = [NSMutableString string];
BOOL foundQuote = YES;
int quoteIndex = 0;

while (foundQuote) {
    NSString *nextPart = @"";
    [scanner scanUpToString:@"\"" intoString:&nextPart];
    if (nextPart != nil) {
        [germanString appendString:nextPart];
    }
    foundQuote = [scanner scanString:@"\"" intoString:nil];
    if (foundQuote) {
        [germanString appendString:((quoteIndex % 2) ? @"“" : @"„")];
        quoteIndex++;
    }
}

NSLog(@"The German version is: %@", germanString);
于 2012-08-23T10:33:45.033 に答える
1

このようなものは正しい方向へのプッシュである必要があります:

static NSString * StringByReplacingEverySecondOccurrenceWithString(
                        NSString * const pSource,
                        NSString * const pSearch,
                        NSString * const pReplace)
{
  /* @todo test that pSource has two occurrences before copying, and return [pSource.copy autorelease] if false. */
  NSMutableString * const str = [pSource.mutableCopy autorelease];
  bool isEven = true;
  for (NSUInteger pos = 0; pos < str.length; isEven = !isEven) {
    const NSRange remainder = NSMakeRange(pos, str.length - pos);
    const NSRange next = [str rangeOfString:pSearch options:0 range:remainder];
    if (NSNotFound != next.location && !isEven) {
      [str replaceCharactersInRange:next withString:pReplace];
    }
    pos = next.location + next.length;
  }
  return [str.copy autorelease];
}

アップデート

質問に対するカレブの編集をフォローしたい場合は、これを使用して置換された文字列を置き換えることができます。

static NSString * StringByReplacingWithAlternatingStrings(
                          NSString * const pSource,
                          NSString * const pSearch,
                          NSString * const pReplaceA,
                          NSString * const pReplaceB)
{
  /* @todo test that pSource has two occurrences before copying, and return [pSource.copy autorelease] if false. */
  NSMutableString * const str = [pSource.mutableCopy autorelease];
  bool isEven = true;
  for (NSUInteger pos = 0; pos < str.length; isEven = !isEven) {
    const NSRange remainder = NSMakeRange(pos, str.length - pos);
    const NSRange next = [str rangeOfString:pSearch options:0 range:remainder];
    if (NSNotFound != next.location) {
      NSString * const substitution = isEven ? pReplaceA : pReplaceB;
      [str replaceCharactersInRange:next withString:substitution];
      pos = next.location + substitution.length;
    }
    else {
      pos = NSNotFound;
    }
  }
  return [str.copy autorelease];
}
于 2012-08-23T09:50:26.570 に答える
1

その場合は正規表現を使用することをお勧めします。

NSString *str = @"just \"some\" text with some \"more\" text";
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\"(\\w+)\"" options:NSRegularExpressionCaseInsensitive error:nil];
NSString *returnString = [regex stringByReplacingMatchesInString:str options:0 range:NSMakeRange(0, [str length]) withTemplate:@"\"$1&quote"];
NSLog(@"%@",returnString);
于 2012-08-23T10:13:06.347 に答える
0

これを行う:

 NSString *string = @"just \"some\" text with some \"more\" text";
 NSArray *arr = [string componentsSeparatedByString:@"\""];
 NSMutableString *formattedResponse = [NSMutableString string];
 for (int i = 0;i<[arr count];i++)//(NSString *str in arr)
 {
    if(i == 0)
    {
        [formattedResponse appendString:[arr objectAtIndex:i]];
    }
    else{
    if(i%2 == 0)
    {
        [formattedResponse appendString:[NSString stringWithFormat:@"%@",[arr objectAtIndex:i]]];
    }
    else{
        [formattedResponse appendString:[NSString stringWithFormat:@"\"%@,,",[arr objectAtIndex:i]]]; // replace downward quotes as i don't know
    }
    }
 }
 NSLog(@"formattedResponse : %@",formattedResponse);
于 2012-08-23T10:05:15.880 に答える