判断字符串的第一个字符是不是为 1
Posted
技术标签:
【中文标题】判断字符串的第一个字符是不是为 1【英文标题】:Determine if the first character of a string is 1 or not判断字符串的第一个字符是否为 1 【发布时间】:2011-11-30 19:12:51 【问题描述】:基本上我正在做一些看起来像电话应用键盘的东西。其他所有内容都按应有的方式输入,但我想弄清楚的是,当首先输入 1 时,最后一个如何获得它,该数字看起来像 1 (555) 555-5555。我确定我的代码需要对 substringfromindexes 进行一些调整以使其匹配,但我现在想要发生的只是检查输入的字符串第一个数字是否为一个。因为如果不是,它只会绕过这部分代码。
else if ([self.self.enteredPhoneNumberString length] == 11 && [self.enteredPhoneNumberString characterAtIndex:0] == '1')
NSString *firstNum = [self.enteredPhoneNumberString substringToIndex:1];
NSString *createFirst = [self.enteredPhoneNumberString substringFromIndex:3];
NSString *firstThree = [createFirst substringToIndex:3];
NSString *createSecond = [self.enteredPhoneNumberString substringFromIndex:3];
NSString *secondThree = [createSecond substringToIndex:3];
NSString *lastSet = [self.enteredPhoneNumberString substringFromIndex:6];
self.label.text = [NSString stringWithFormat:@"%@ (%@) %@-%@", firstNum, firstThree, secondThree, lastSet];
如果您知道如何调整 substrinFromIndex 以获得我想要的效果,那么这将节省我在找到正确顺序之前进行篡改的时间。提前感谢所有帮助。 :)
哦,顺便说一句,当我到达代码中的这部分时,它会在上面的代码中设置一个断点。
修复:
感谢所有帮助它现在工作。最终这样做了,由于某种原因,断点在此处完成时不会发生。
else if ([self.self.enteredPhoneNumberString length] >= 11 )
if ([self.enteredPhoneNumberString characterAtIndex:0] == '1' && [self.self.enteredPhoneNumberString length] == 11)
NSString *firstNum = [self.enteredPhoneNumberString substringToIndex:1];
NSString *createFirst = [self.enteredPhoneNumberString substringFromIndex:1];
NSString *firstThree = [createFirst substringToIndex:3];
NSString *createSecond = [self.enteredPhoneNumberString substringFromIndex:4];
NSString *secondThree = [createSecond substringToIndex:3];
NSString *lastSet = [self.enteredPhoneNumberString substringFromIndex:7];
self.label.text = [NSString stringWithFormat:@"%@ (%@) %@-%@", firstNum, firstThree, secondThree, lastSet];
else
self.label.text = [NSString stringWithFormat:@"%@", enteredPhoneNumberString];
而且,必须再次检查长度是否为 11 似乎毫无意义,但因为它导致了以前的问题,我并没有太多选择,因为我需要它知道它是否超过 11 所以它可以开始做其他事情。
【问题讨论】:
调试器在 Xcode 4.2 中默认指向 main.m(出于某种原因)。这个问题将帮助您让调试器指向正确的位置。 ***.com/questions/8321184/…那你调试会更好 @Maudicus Ya 我发现这个问题与 4.2 有关,它允许另一个相同的应用程序继续运行,它不会让你启动另一个。必须进行完整的系统重新启动才能解决此问题。问题是我仍然在你们的解决方案中遇到断点:( 我看不出您发布的代码有什么问题,它看起来很完美。你确定其他地方没有错误吗? 你把self.self改成self了吗?它在哪里崩溃,输出是什么? 【参考方案1】:它可能是你的代码开始的上面的 if 语句是真的......
else if ([self.self.enteredPhoneNumberString length] == 11 && [self.enteredPhoneNumberString characterAtIndex:0] == '1')
需要清理一下。您不应该在这里检查长度 11,只需检查长度 > 0 以及第一个字符是否为 1。进行必要的格式化,修剪空格和 (),然后检查长度。
还有,self.self
是个潜在问题,放弃第二个自己
请忽略 CocoaFu 的评论,他的解决方案更好,但该评论具有误导性。
在以下代码中,我的日志语句显示在控制台中
NSString * test = [NSString stringWithString:@"test"];
unichar c = [adjusted characterAtIndex:0];
if (c == 't')
NSLog(@"can compare char");
【讨论】:
所以我尝试了 else if ([self.enteredPhoneNumberString characterAtIndex:0] == '1') 使用==
的比较不是比较字符串,而是比较指向字符串的指针。
他需要做一个字符串长度检查,因为如果长度是0
characterAtIndex:
调用会抛出异常。 @CocoaFu 他不是在比较字符串,而是在比较字符。 ==
运算符是正确的。
@AbhiBeckert 是正确的。我们看到的代码上方可能有一个 if 语句,以确保字符串不为空,但不能保证。我有点明白他的示例字符串有 15 个字符
@Maudicus 我无法解释为什么它真的有效,但基本上我有相同的代码。另一个 else if 的外部部分仍在检查长度。在里面我放了另一个 if 来检查 characterAtIndex:0 是否为 1。它有效,但我不确定为什么前一个在这种情况下不能正常工作【参考方案2】:
if [[self.enteredPhoneNumberString substringToIndex:1] isEqualToString:@"1"]
我想这就是你想要的......
【讨论】:
您需要防止self.enteredPhoneNumberString
为空的情况——-substringToIndex:
在这种情况下会非常有帮助地抛出异常。 ://
@Owen Hartnett 我试了一下,它再次作为断点停在它上面。可能与其他代码有关。即使它在 else if 的其他部分似乎工作正常。我只加了前两个
substringToIndex
后跟isEqualToString
将给出与@steven 的characterAtIndex
代码完全相同的结果,但与characterAtIndex
相比要快一百万倍。对于这么简单的事情,我不会使用subStringToIndex
或isEqualToString
。【参考方案3】:
第一个字符最简单的比较:
[self.enteredPhoneNumberString hasPrefix:@"1"]
【讨论】:
@beryllium 好的,你知道为什么上面的部分中可能会有一个 SIGBART 吗? 好吧,一个注释characterAtIndex
返回 unichar(不是 NSString)并且 '1' 也不是 NSString
@CocoaFu 你可以像这样比较字符。 '1' 是一个字符,并且 characterAtIndex 的返回类型是 unichar ......但是 hasPrefix 是一个更好的实现
@CocoaFu 就像其他解决方案一样,它继续给我一个断点。问题是如果我把那个部分拿出来运行下一个,如果它工作得很好以上是关于判断字符串的第一个字符是不是为 1的主要内容,如果未能解决你的问题,请参考以下文章
判断java或js中的某个字符串中是不是包含有某个字符或是字符串