6

私はこのような文字列を持っています。

NSString *myString = @"{53} balloons";

部分文字列を取得するにはどうすればよい53ですか?

4

10 に答える 10

18
NSString *myString = @"{53} balloons";
NSRange start = [myString rangeOfString:@"{"];
NSRange end = [myString rangeOfString:@"}"];
if (start.location != NSNotFound && end.location != NSNotFound && end.location > start.location) {
    NSString *betweenBraces = [myString substringWithRange:NSMakeRange(start.location+1, end.location-(start.location+1))];
}

編集:範囲チェック、thxをKeab42に追加しました-良い点です。

于 2013-02-19T14:03:41.170 に答える
6

これが私がしたことです。

NSString *myString = @"{53} balloons";
NSCharacterSet *delimiters = [NSCharacterSet characterSetWithCharactersInString:@"{}"];
NSArray *splitString = [myString componentsSeparatedByCharactersInSet:delimiters];
NSString *substring = [splitString objectAtIndex:1];

部分文字列は 53 です。

于 2013-02-20T08:03:18.133 に答える
2

正規表現を使用して、中かっこの間の数値を取得できます。少し複雑に思えるかもしれませんが、プラス面は、複数の数字を検索し、数字の位置が問題にならないことです。

スウィフト 4.2:

let searchText = "{53} balloons {12} clowns {123} sparklers"
let regex = try NSRegularExpression(pattern: "\\{(\\d+)\\}", options: [])
let matches = regex.matches(in: searchText, options: [], range: NSRange(searchText.startIndex..., in: searchText))
matches.compactMap { Range($0.range(at: 1), in: searchText) }
       .forEach { print("Number: \(searchText[$0])") }

目的 C:

NSString *searchText = @"{53} balloons {12} clowns {123} sparklers";

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\{(\\d+)\\}" 
                                                                       options:0 
                                                                         error:nil];

NSArray *matches = [regex matchesInString:searchText 
                                  options:0 
                                    range:NSMakeRange(0, searchText.length)];

for (NSTextCheckingResult *r in matches)
{
    NSRange numberRange = [r rangeAtIndex:1];
    NSLog(@"Number: %@", [searchText substringWithRange:numberRange]);
}

これは出力されます:

Number: 53
Number: 12
Number: 123
于 2014-03-07T11:08:24.777 に答える
1

このコードを試してください。

 NSString *myString = @"{53} balloons";
 NSString *value = [myString substringWithRange:NSMakeRange(1,2)];
于 2013-02-19T13:58:29.367 に答える
1

Swift 2.1 の場合:-

var start = strData?.rangeOfString("{")
var end = strData?.rangeOfString("}")
if (start!.location != NSNotFound && end!.location != NSNotFound && end!.location > start!.location) {
    var betweenBraces = strData?.substringWithRange(NSMakeRange(start!.location + 1, end!.location-(start!.location + 1)))
    print(betweenBraces)
}
于 2016-03-30T11:35:24.747 に答える
0

NSScanner少なくとも一般的なケースに取り組んでいるのであれば、クラスを探していると思います。Applesのドキュメントをご覧ください。

于 2013-02-19T14:02:24.280 に答える
0

任意の数のデータでチェック:

  NSString *str = @"{53} balloons";
    NSArray* strary = [str componentsSeparatedByString: @"}"];
    NSString* str1 = [strary objectAtIndex: 0];
    NSString *str2 = [str1 stringByReplacingOccurrencesOfString:@"{" withString:@""];
    NSLog(@"number = %@",str2);

別の方法は

NSString *tmpStr = @"{53} balloons";
NSRange r1 = [tmpStr rangeOfString:@"{"];
NSRange r2 = [tmpStr rangeOfString:@"}"];
NSRange rSub = NSMakeRange(r1.location + r1.length, r2.location - r1.location - r1.length);
NSString *subString = [tmpStr substringWithRange:rSub];
于 2013-02-19T14:06:56.627 に答える
0

「{」と「}」の場所を検索します。それらのインデックスの間の部分文字列を取ります。

于 2013-02-19T14:04:29.760 に答える
-1

何桁になるかわからないが、常に中括弧で囲まれることがわかっている場合は、これを試してください。

NSString *myString = @"{53} balloons";
NSRange startRange = [myString rangeOfString:@"{"];
NSRange endRange = [myString rangeOfString:@"}"];
if (startRange.location != NSNotFound && endRange.location != NSNotFound && endRange.location > startRange.location) {
    NSString *value = [myString substringWithRange:NSMakeRange(startRange.location,endRange.ocation - startRange.location)];
}

おそらくもっと効率的な方法があります。

于 2013-02-19T14:05:49.517 に答える