substringToIndex 即使在修剪后也没有给出正确的输出

substringToIndex is not giving correct output even after trimming

下面有。

NSString *myStxt = [postText.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
myStxt = [myStxt stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
myStxt = [myStxt stringByReplacingOccurrencesOfString:@"\r" withString:@""];
myStxt = [myStxt stringByReplacingOccurrencesOfString:@"\t" withString:@""];

NSLog(@"myStxt>>%@<<", [myStxt substringToIndex:1]);

postText.text 包含我通过网络服务分配的阿拉伯字符串

postText.text = [[myArray objectAtIndex:0] valueForKey:@"myVariable"];

它的措辞是‏رونالدينهو : الكرة الذهبية الخامسة لميسي رائعه و هي من ضمن تلك الأشياء التي تُعطيني سعاده اكثر

现在当我运行上面的代码下面是结果...

myStxt>><<  --> NSLog(@"myStxt>>%@<<", [myStxt substringToIndex:1]);
myStxt>>ر<<  --> NSLog(@"myStxt>>%@<<", [myStxt substringToIndex:2]);

我的预期如下。

myStxt>>ر<<  --> NSLog(@"myStxt>>%@<<", [myStxt substringToIndex:1]);
myStxt>>رو<<  --> NSLog(@"myStxt>>%@<<", [myStxt substringToIndex:2]);

知道为什么这会给我错误的详细信息吗?


This is link for JSON Data

第二个对象给我这个问题,但第三个对象工作正常。


编辑 1

对于下面的代码

for (int i=0;i<myStxt.length;i++) {
    NSLog(@"mmm==%d==%@", i, [myStxt substringWithRange:NSMakeRange(i,1)]);
}

下面是输出

2016-02-02 12:01:40.587 myapp[91747:12700140] mmm==0==‏
2016-02-02 12:01:40.587 myapp[91747:12700140] mmm==1==ر
2016-02-02 12:01:40.588 myapp[91747:12700140] mmm==2==و
2016-02-02 12:01:40.588 myapp[91747:12700140] mmm==3==ن
2016-02-02 12:01:40.588 myapp[91747:12700140] mmm==4==ا
2016-02-02 12:01:40.588 myapp[91747:12700140] mmm==5==ل
2016-02-02 12:01:40.588 myapp[91747:12700140] mmm==6==د
2016-02-02 12:01:40.588 myapp[91747:12700140] mmm==7==ي
...... and so on...

可能有一些 space 出现在你的阿拉伯语单词代码中 这是我的代码 运行 很好

 NSString *str =@"رونالدينهو : الكرة الذهبية الخامسة لميسي رائعه و هي من ضمن تلك الأشياء التي تُعطيني سعاده اكث";
NSLog(@"myStxt>>%@<<", [str substringToIndex:1]);
NSLog(@"myStxt>>%@<<", [str substringToIndex:2]);

已调试: myStxt>>б<<

myStxt>>бو<<

您是否尝试过将字符串的所有字符一个一个地打印出来,结果如何?您是否尝试打印前五个字符以便您有机会唯一地标识打印了输入的哪一部分?

目前我只能猜测您的字符串是拉丁文和阿拉伯文的混合体(如中间的冒号所示),并且字符串的开头与您认为的相去甚远。

当然,如果文本的行由 CR 或 LF 分隔,则第一个字符就是您在第一行右侧看到的字符。删除 CR 和 LF 后,仍然 是第一个字符。所以很可能代码没有问题;但你的期望是错误的。

加载您的 JSON 后,很明显您文本中的第一个字符是 RIGHT-TO-LEFT MARK,这是一个格式字符,因此当您修剪空白字符时它不会被删除。

您可以使用以下方法删除它:

text = [text stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]];

自己测试,可以使用如下代码:

for (NSUInteger i = 0; i < text.length; i++) {
    NSLog(@"Character at index %@: \"%i\"", @(i), [text characterAtIndex:i]);
}

正在打印字符的 整数 值。