Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 查找NSString中字符(#)的最后一个索引(位置)_Ios_Objective C_Iphone_String_Nsstring - Fatal编程技术网

Ios 查找NSString中字符(#)的最后一个索引(位置)

Ios 查找NSString中字符(#)的最后一个索引(位置),ios,objective-c,iphone,string,nsstring,Ios,Objective C,Iphone,String,Nsstring,想要获取最后一次出现的#但以下代码对其他字符运行良好,但对特殊性却无法给出完美结果的索引“#” 代码在viewDidLoad中正常工作,但在textfield中不工作,应更改CharactersInRange 代码: txtTest.text = @"@ashish @test #vijay $4030 @post"; - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range

想要获取最后一次出现的#但以下代码对其他字符运行良好,但对特殊性却无法给出完美结果的索引“#”

代码在viewDidLoad中正常工作,但在textfield中不工作,应更改CharactersInRange

代码:

txtTest.text = @"@ashish @test #vijay $4030 @post";


- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
   NSRange range = [textField.text rangeOfString:@"a" options:NSBackwardsSearch];        
    NSLog(@"a :: %d   ",range.location);

    range = [str rangeOfString:@"@" options:NSBackwardsSearch];
    NSLog(@"@ :: %d   ",range.location);

    range = [str rangeOfString:@"#" options:NSBackwardsSearch];
    NSLog(@"# :: %d",range.location);

    range = [str rangeOfString:@"$" options:NSBackwardsSearch];
    NSLog(@"$ :: %d\n",range.location);

}
结果: a:17@:26#:2147483647美元:20


尝试使用%lu个无符号长字符,而不是%d个。工作正常

NSString *str = @"ashish @test #vijay $4030 @post";

NSRange range = [str rangeOfString:@"a" options:NSBackwardsSearch];
NSLog(@"a :: %lu   ",(unsigned long)range.location);

range = [str rangeOfString:@"@" options:NSBackwardsSearch];
NSLog(@"@ :: %lu   ",(unsigned long)range.location);

range = [str rangeOfString:@"#" options:NSBackwardsSearch];
NSLog(@"# :: %lu",(unsigned long)range.location);

range = [str rangeOfString:@"$" options:NSBackwardsSearch];
NSLog(@"$ :: %lu\n",(unsigned long)range.location);
a::17

@::26

#::13


$::20首先,您有一个拼写错误。它是
NSString*str
,而不是
NSSting*str

其余的在我的机器上运行良好

NSString *str = @"ashish @test #vijay $4030 @post";

NSRange range = [str rangeOfString:@"a" options:NSBackwardsSearch];
NSLog(@"a :: %lu   ",range.location);

range = [str rangeOfString:@"@" options:NSBackwardsSearch];
NSLog(@"@ :: %lu   ",range.location);

range = [str rangeOfString:@"#" options:NSBackwardsSearch];
NSLog(@"# :: %lu",range.location);

range = [str rangeOfString:@"$" options:NSBackwardsSearch];
NSLog(@"$ :: %lu\n",range.location);
答复:

2016-02-29 15:19:39.554 StackOverflowDemo[9189:1825956] a :: 17   
2016-02-29 15:19:39.555 StackOverflowDemo[9189:1825956] @ :: 26   
2016-02-29 15:19:39.555 StackOverflowDemo[9189:1825956] # :: 13
2016-02-29 15:19:39.555 StackOverflowDemo[9189:1825956] $ :: 20

你能说得更清楚些吗?

那就是
NSNotFound
。可能字符看起来相同,但实际上不同,或者其中有一个零宽度的空格或类似的空格?是的,
@“#”
字符串中有一个不可见的字符。使用箭头键将光标移过它,您将看到它。复制并粘贴到Xcode(这可能会自动格式化某些内容,甚至可能是编码内容)。修正了第一行的NSString输入错误,运行良好。a::17@::26#:::13$::20,我发现这个结果更正了NSStringspelling@jamil当我在viewDidLoad中放入相同的代码时,它工作正常,但在ShouldChangeCharacters范围内它不工作。。将“str”替换为string感谢您的响应,并且在视图中加载它的工作正常,但在shouldchangeCharacters范围内它不工作shouldchangeCharacters范围内工作正常。奇怪,但在我的机器中它不工作:(我还附上了截图,它向我展示了这个随机的大整数,以防字符不作为文本“ash”出现在文本字段中。)显示a::0@::9223372036854775807#:::9223372036854775807$:9223372036854775807的日志。因此,请仔细检查您的委托和字段。请尝试更改范围对象的名称,因为相同名称的NSRange对象来自shouldChangeCharactersInRange方法。在视图中加载其工作正常,但在shouldChangeCharactersInRang中e它不起作用:(您是否检查(并重新输入)注释中提到的字符串?您确实有一些“非标准”字符,不同的位置也清楚地表明了这一点。