【问题标题】:String compare Objective-C字符串比较 Objective-C
【发布时间】:2011-02-21 21:01:08
【问题描述】:

我一直在努力进行简单的比较,但我无法让它发挥作用。 我正在读取一个 XML 文件,我需要比较其中的数据以显示正确的图片。

http://www.cleaner.se/larm.xml(解析示例文件)

我尝试过类似的方法:

if([aLarm.larmClass isEqualToString:@"A"])
    NSLog(@"same");
 else
    NSLog(@"Not same");

如果我使用:NSLog(aLarm.larmClass); 控制台可以很好地输出它。我做错了什么?

【问题讨论】:

  • 什么是“aLarm.larmClass”?它是一个字符串吗?需要更多信息。

标签: objective-c compare


【解决方案1】:

您可以使用 NSString compare: 方法。例如:

if ([myString caseInsensitiveCompare:@"A"] == NSOrderedSame ) {
    NSLog(@"The same");
} else {
    NSLog(@"Not the same.");
}

结果是一个 NSComparisonResult,它只是一个类型为 NSOrderedSame、NSOrderedAscending 和 NSOrderedDescending 的枚举。

查看各种比较的文档:方法here

当然,如果接收者实际上是一个 NSString,那么 isEqualToString: 也应该可以工作。所以如果你想比较一个类名(aLarm.larmClass ??),那么你可以调用:

if ([NSStringFromClass([aLarm class]) isEqualToString:@"A"] ) {
    NSLog(@"The same");
}

【讨论】:

  • 我认为我的名字 larmClass 如果令人困惑,它是一个 NSString 而不是一个类。所以我通过从我的班级“aLarm”中调用 objekt 来达到它,即:aLarm.larmClass 以及 aLarm.description
【解决方案2】:

如果larmClass 属性是一个字符串,请确保它实际上是一个字符长度(即它没有任何在解析 XML 时意外包含的前导或尾随空格)。如果larmClass 属性确实是包含字母“A”的NSString,那么[aLarm.larmClass isEqualToString:@"A"] 将返回YES

做一个:

NSLog(@"%u, %@", [aLarm.larmClass length], aLarm.larmClass);

并确保它显示“1, A”。

【讨论】:

  • 我猜你在哪里正确 m8。我在它前面有一个 \n ,我删除了它,然后它起作用了。 tnx 的反馈和伟大的想法让我解决它。注册:曼德尔
猜你喜欢
  • 1970-01-01
  • 2011-02-05
  • 2010-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
相关资源
最近更新 更多