【问题标题】:Find the first character in a string which isn't a specified character查找字符串中不是指定字符的第一个字符
【发布时间】:2017-09-22 23:02:13
【问题描述】:

我无法理解这一点。参加基础课程,这个任务是关于在字符串中查找不是少数预先指定的字符之一的字符的索引。

教科书上说代码应该是:

public static int sokForstaIckeBland (String s, String tecken, int start) {
for (int i=start; i<s.length(); i++)
  if (tecken.indexOf(s.charAt(i)) == -1)
    return i;
return -1;
}

String s 是我要在其中搜索字符的文本,string tecken 是我要在搜索中排除的字符,int start 是开始搜索的位置。

我不明白为什么 if 语句以 -1 结尾,这是做什么的?

编辑: 一个例子。字符串 s = "28723709dh23ha" 和字符串 tecken = "=0123456789"。当它执行时,我想找到不是 0123456789 的字符的第一次出现并且返回了 int 。但我不明白这种方法是如何做到的。知道这是非常基本的,但你必须从某个地方开始 :)

【问题讨论】:

  • 这是一种表示您没有找到任何东西的方式。
  • 返回-1 表示您传递给indexOf 的字符在String 中根本找不到。
  • return -1if 之外,甚至在for 之外,因此只有在循环遍历字符串而没有找到合适的字符时才会执行
  • 你为什么不问班主任或助教而不是这个网站上的随机陌生人?导师的工作是教书,所以如果你有问题,就去问他/她。
  • 我知道 -1 表示我没有找到任何东西,但对我来说,似乎两个 return 语句都返回相同的东西。我在上面的文字中添加了更多信息。 @stackoverflowuser2010 这是一个有用的评论,谢谢!仅供参考,这是一本我正在学习的书,没有老师的正式课程。

标签: java if-statement methods char indexof


【解决方案1】:

分解 if 语句:

  • tecken.indexOf(s.charAt(i)) 将返回一个整数
  • 整数将大于或等于-1
  • 只要 tecken.indexOf(s.charAt(i)) 返回 -1,方法就会返回 i
  • i 是 s 的索引,如果有一个字符不在 String tecken 中

因此,此方法检查 s 中从 s.charAt(start) 开始的每个字符(因为 i 已初始化为 start)。该方法将 s.charAt(i) 与 tecken 中的每个字符进行比较。如果 s.charAt(i) 在 tecken 中,则 tecken.indexOf(s.charAt(i)) 返回 s.charAt(i) 在 tecken 中出现的索引。如果 s.charAt(i) 不在 tecken 中,则 tecken.indexOf(s.charAt(i)) 返回 -1。 这就是我们与 -1 进行比较的原因。

【讨论】:

    【解决方案2】:
      if (tecken.indexOf(s.charAt(i)) == -1)
        return i;
    

    这里您正在检查i 处的字符s.charAt(i) 是否存在于字符串tecken 中,因此您在tecken 字符串中通过tecken.indexOf(s.charAt(i)) 找到它的索引。

    indexOf 如果在字符串中找不到该元素,则返回-1。因此,如果在字符串中找不到它,那么函数将返回该索引,因为是第一个 字符串 tecken 中不存在的字符,这就是您想要的。

    在这一行

    return -1;
    

    如果它没有找到任何字符,那么它将简单地返回-1,表示没有一个索引符合条件。

    对于字符串s = "28723709dh23ha"和字符串tecken = "0123456789",它将返回8,这是字符串d在字符串s = "28723709dh23ha"中的索引

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 2020-02-14
      • 2011-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多