48

PHPでは、これを行うことができます:

$new = str_replace(array('/', ':', '.'), '', $new);

...文字 / : のすべてのインスタンスを置き換えます。空白文字列 (それらを削除するため)

Objective-Cでこれを簡単に行うことはできますか? それとも自分で巻く必要がありますか?

現在、私は複数の呼び出しを行っていますstringByReplacingOccurrencesOfString:

strNew = [strNew stringByReplacingOccurrencesOfString:@"/" withString:@""];
strNew = [strNew stringByReplacingOccurrencesOfString:@":" withString:@""];
strNew = [strNew stringByReplacingOccurrencesOfString:@"." withString:@""];

ありがとう、
マット

4

8 に答える 8

122

これを行うにはやや非効率的な方法:

NSString *s = @"foo/bar:baz.foo";
NSCharacterSet *doNotWant = [NSCharacterSet characterSetWithCharactersInString:@"/:."];
s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
NSLog(@"%@", s); // => foobarbazfoo

これをもう少し効率的に実行したい場合は、をNSScanner見てください。-[NSString rangeOfCharacterFromSet: ...]

于 2009-04-03T13:55:09.397 に答える
27

あなたの方法が十分に良い状況があると思いますマット..ところで、私は使用する方が良いと思います

[strNew setString: [strNew stringByReplacingOccurrencesOfString:@":" withString:@""]];

それよりも

strNew = [strNew stringByReplacingOccurrencesOfString:@"/" withString:@""];

NSMutableStringポインタをNSStringで上書きしていると思うので、メモリリークが発生する可能性があります。

于 2009-06-02T14:01:12.370 に答える
7

上に投稿された Nicholas と本質的に同じことですが、一連の文字を除くすべてを削除したい場合 (たとえば、セット "ABCabc123" に含まれていないものをすべて削除したい場合)、次のことができます。

NSString *s = @"A567B$%C^.123456abcdefg";
NSCharacterSet *doNotWant = [[NSCharacterSet characterSetWithCharactersInString:@"ABCabc123"] invertedSet];
s = [[s componentsSeparatedByCharactersInSet: doNotWant] componentsJoinedByString: @""];
NSLog(@"%@", s); // => ABC123abc

英数字のみが必要な場合は、記号などを取り除くのに役立ちます。

于 2014-01-22T16:34:48.710 に答える
2
+ (NSString*) decodeHtmlUnicodeCharactersToString:(NSString*)str
{
    NSMutableString* string = [[NSMutableString alloc] initWithString:str];  // #&39; replace with '
    NSString* unicodeStr = nil;
    NSString* replaceStr = nil;
    int counter = -1;

    for(int i = 0; i < [string length]; ++i)
    {
        unichar char1 = [string characterAtIndex:i]; 
        for (int k = i + 1; k < [string length] - 1; ++k)
        {
            unichar char2 = [string characterAtIndex:k]; 

            if (char1 == '&'  && char2 == '#' ) 
            { 
                ++counter;
                unicodeStr = [string substringWithRange:NSMakeRange(i + 2 , 2)]; // read integer value i.e, 39
                replaceStr = [string substringWithRange:NSMakeRange (i, 5)];  // #&39;
                [string replaceCharactersInRange: [string rangeOfString:replaceStr] withString:[NSString stringWithFormat:@"%c",[unicodeStr intValue]]];
                break;
            }
        }
    }

    [string autorelease];

    if (counter > 1)
        return [self decodeHtmlUnicodeCharactersToString:string]; 
    else
        return string;
}
于 2010-04-01T13:03:23.090 に答える
1

削除したい文字が互いに隣接している場合は、

stringByReplacingCharactersInRange:(NSRange) withString:(NSString *)

それ以外は、同じ機能を何回も使うだけなら悪くないと思います。より一般的な方法で同じことを行う大きなメソッドを作成するよりもはるかに読みやすいです。

于 2012-01-18T21:39:17.603 に答える
1

これは、replacementOccurances の regularExpression オプションを使用した Swift 3 の例です。

String.CompareOptions.regularExpressionオプションと一緒にreplacementOccurrencesを使用します。

例 (Swift 3):

var x = "<Hello, [play^ground+]>"
let y = x.replacingOccurrences(of: "[\\[\\]^+<>]", with: "7", options: .regularExpression, range: nil)
print(y)

出力:

7Hello, 7play7ground777
于 2016-11-10T15:36:48.110 に答える