判断字符串的第一个字符是不是为 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') 使用==的比较不是比较字符串,而是比较指向字符串的指针。 他需要做一个字符串长度检查,因为如果长度是0characterAtIndex:调用会抛出异常。 @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 相比要快一百万倍。对于这么简单的事情,我不会使用subStringToIndexisEqualToString【参考方案3】:

第一个字符最简单的比较:

[self.enteredPhoneNumberString hasPrefix:@"1"]

【讨论】:

@beryllium 好的,你知道为什么上面的部分中可能会有一个 SIGBART 吗? 好吧,一个注释 characterAtIndex 返回 unichar(不是 NSString)并且 '1' 也不是 NSString @CocoaFu 你可以像这样比较字符。 '1' 是一个字符,并且 characterAtIndex 的返回类型是 unichar ......但是 hasPrefix 是一个更好的实现 @CocoaFu 就像其他解决方案一样,它继续给我一个断点。问题是如果我把那个部分拿出来运行下一个,如果它工作得很好

以上是关于判断字符串的第一个字符是不是为 1的主要内容,如果未能解决你的问题,请参考以下文章

算法:判断两个字符串是不是包含相同的字符

判断java或js中的某个字符串中是不是包含有某个字符或是字符串

php判断第一位字符串是否字母

怎样用C语言编写程序判断字符串S1是不是包含字符串S2.(不使用库函数)

判断包含字符串,有没有类似sql中的 in的函数

js 字符串获取最后一个元素