我有两个字符串,一个包含值“5.2.3”,另一个包含值“5.2.32”。我的问题是:如何比较这两个字符串?
if ([string1 integerValue] >= [sting2 integerValue])
{
NSLog(@"process");
}
我试过上面的线但没有得到它。
那么正确的答案已经给出。因为我已经花了半个小时,所以我不想浪费它。
-(BOOL)string:(NSString*)str1 isGreaterThanString:(NSString*)str2
{
NSArray *a1 = [str1 componentsSeparatedByString:@"."];
NSArray *a2 = [str2 componentsSeparatedByString:@"."];
NSInteger totalCount = ([a1 count] < [a2 count]) ? [a1 count] : [a2 count];
NSInteger checkCount = 0;
while (checkCount < totalCount)
{
if([a1[checkCount] integerValue] < [a2[checkCount] integerValue])
{
return NO;
}
else if([a1[checkCount] integerValue] > [a2[checkCount] integerValue])
{
return YES;
}
else
{
checkCount++;
}
}
return NO;
}
你可以这样调用这个方法:-
if([self string:str1 isGreaterThanString:str2])
{
NSLog(@"str2 is lower than the str1");
}
else
{
NSLog(@"str1 is lower than the str2");
}
看起来您在这里所拥有的并不是真正的“浮点”值,而是某种多部分“数字”(类似于软件版本编号?),任何标准转换都不会涵盖,但会也不能将“正确”作为简单的字符串进行比较。
首先,您需要准确指定比较规则是什么。例如,我怀疑你想要类似的东西:
1.2 > 1.1
1.1.1 > 1.1
1.11 > 1.2
1.2.3 > 1.2.2
1.2.22 > 1.2.3
(换句话说,用“.”分割字符串,并对每个组件进行数字比较)。您必须决定如何处理输入中出现的字母、其他分隔符等内容。例如 1.0b1 > 1.01 ?
确定规则后,编写一个方法(返回NSComparisonResult
)来实现比较。如果你想变得花哨,你甚至可以在 NSString 上的一个类别中定义你的比较方法,这样你就可以做类似的事情
if ([string1 mySuperDuperCompareTo:string2] == NSOrderedAscending) {
NSLog(@"%@ < %@", string1, string2);
} // ... etc ...
@老虎是正确的。很抱歉误解了你的问题。我已经将已删除标记为我的旧答案。这是更新的。
由于有多个 . (点)这里可用的是新的解决方案。这将首先检查值,例如 5.2.3 和 5.2.32 是否存在。然后,
这是逻辑-我还没有编译,但这是基本想法-可能需要一些更正
// 从.....分离 ”。”
NSArray *arrString1 = [string1 componentSeparatedBy:@"."];
NSArray *arrString2 = [string1 componentSeparatedBy:@"."];
BOOL isString1Bigger = NO; // a variable to check
BOOL isString2Bigger = NO; // a variable to check
// check count to run loop accordingly
if ([arrString1 count] <= [arrString2 count]) {
for (int strVal=0; strVal<[arrString1 count]; strVal++) {
// compare strings value converted into integer format
// when you get larger then break the loop
if([[arrString1 objectAtIndex:strVal] intValue] > [[arrString2 objectAtIndex:strVal] intValue]) {
isString1Bigger = YES;
break;
}
}
if ([arrString1 count] > [arrString2 count]) {
// use arrString2 in loop and isString2Bigger as a mark
}
// if after running both the if condition still require to check if both are same or not, for that,
if ((isString1Bigger == NO) && (isString2Bigger == NO)) {
// same string values
}
可能需要进行一些修改才能运行。但它是比较您提供的字符串值的基本概念。