0

NSString の 2 番目のコンマまで部分文字列を作成する必要があります。

入力:

NSString *input = @"title, price, Camry, $19798, active";

望ましい出力:

NSString *output = @"title, price";

ありがとう!

アップデート:

私は次のものを持っていますが、問題は最後のコンマをスキップする必要があることです:

NSString *output = [input rangeOfString:@"," options:NSBackwardsSearch];
4

6 に答える 6

4

これを試して:

- (NSString *)substringOfString:(NSString *)base untilNthOccurrence:(NSInteger)n ofString:(NSString *)delim
{
    NSScanner *scanner = [NSScanner scannerWithString:base];
    NSInteger i;
    for (i = 0; i < n; i++)
    {
         [scanner scanUpToString:delim intoString:NULL];
         [scanner scanString:delim intoString:NULL];
    }
    return [base substringToIndex:scanner.scanLocation - delim.length];
}
于 2012-05-22T19:43:43.957 に答える
3

このコードは、必要なことを行う必要があります。

NSString *input = @"title, price, Camry, $19798, active";

NSArray *array = [input componentsSeparatedByString:@","];

NSArray *subArray = [array subarrayWithRange:NSMakeRange(0, 2)];

NSString *output = [subArray componentsJoinedByString:@","];

NSLog(output);
于 2012-05-22T19:51:36.337 に答える
1

objc で次のように、分割 -> スプライス -> その文字列を結合できます。

NSString *input = @"title, price, Camry, $19798, active";
// split by ", "
NSArray *elements = [input componentsSeparatedByString: @", "];
// grab the subarray
NSArray *subelements = [elements subarrayWithRange: NSMakeRange(0, 2)];
// concat by ", " again
NSString *output = [subelements componentsJoinedByString:@", "];
于 2012-05-22T19:48:48.020 に答える
0

次のようなことを試すことができます:

NSArray *items = [list componentsSeparatedByString:@", "];
NSString result = @"";
result = [result stringByAppendingString:[items objectAtIndex:0]];
result = [result stringByAppendingString:@", "];
result = [result stringByAppendingString:[items objectAtIndex:1]];

例外を回避したい場合は、少なくとも 2 つのアイテムがあることを確認する必要があります。

于 2012-05-22T19:40:51.123 に答える
0

やりたいことを実行するためのコードを単純に記述することは、まったく問題ありません。例えば:

int commaCount = 0;
int i;
for (i = 0; i < input.count; i++) {
    if ([input characterAtIndex:i] == (unichar) ',') {
        commaCount++;
        if (commaCount == 2) break;
    }
}

NSString output = nil;
if (commaCount == 2) {
   output = [input substringToIndex:i];
}
于 2012-05-22T19:49:54.860 に答える
0

NSString任意の文字列の n 番目の出現を見つけることを処理するカテゴリを作成できます。これは ARC の例です。

//NSString+MyExtension.h

@interface NSString(MyExtension)
-(NSString*)substringToNthOccurrence:(NSUInteger)nth 
                            ofString:(NSString*)string;
-(NSString*)substringToNthOccurrence:(NSUInteger)nth 
                            ofString:(NSString*)string 
                             options:(NSStringCompareOptions)options;
@end
@implementation NSString(MyExtension)
-(NSString*)substringToNthOccurrence:(NSUInteger)nth 
                            ofString:(NSString*)string
{
    return [self substringToNthOccurrence:nth ofString:string options:0];
}
-(NSString*)substringToNthOccurrence:(NSUInteger)nth 
                            ofString:(NSString*)string 
                             options:(NSStringCompareOptions)options
{
    NSUInteger location = 0,
        strlength = [string length],
        mylength = [self length];

    NSRange range = NSMakeRange(location, mylength);

    while(nth--)
    {
        location = [self rangeOfString:string 
                               options:options 
                                 range:range].location;   
        if(location == NSNotFound || (location + strlength) > mylength) 
        {
            return [self copy]; //nth occurrence not found
        }           
        if(nth == 0) strlength = 0; //This prevents the last occurence from being included

        range = NSMakeRange(location + strlength, mylength - strlength - location);
    }        
    return [self substringToIndex:location];
}
@end

//main.m
#import "NSString+MyExtension.h"
int main(int argc, char *argv[])
{
    @autoreleasepool {
        NSString *output = [@"title, price, Camry, $19798, active" substringToNthOccurrence:2 ofString:@","];
        NSLog(@"%@", output);
    }
}

*変更可能なバージョンを実装するための演習として残します。

于 2012-05-22T20:28:18.840 に答える