我有两个字符串,一个包含值“5.2.3”,另一个包含类似“5.2.32”的值。我的问题是:如何比较这两个字符串?
if ([string1 integerValue] >= [sting2 integerValue])
{
NSLog(@"process");
}
我在上面试过但没有得到它。
答案 0 :(得分:4)
已经给出了正确答案。因为我已经花了半个小时,所以我不想浪费它。
-(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.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 ...
另见How to let the sortedArrayUsingSelector using integer to sort instead of String?
答案 2 :(得分:0)
@The Tiger是对的。很抱歉误解了你的问题。我已经将已删除标记为我的旧答案。这是更新的。
因为有多个。这里提供的(点)是新的解决方案。这将首先检查值,如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
}
可能需要进行一些修改才能运行。但它是比较你提供的字符串值的基本概念。