查找字符串中第一个不是指定字符的字符

Find the first character in a string which isn't a specified character

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

课本上说代码应该是:

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 的 char 并且返回那个 int。但我不明白这种方法是如何做到的。知道它很基础,但你必须从某个地方开始:)

分解 if 语句:

  • tecken.indexOf(s.charAt(i)) 将 return 一个整数
  • 整数将大于或等于-1
  • 一旦 tecken.indexOf(s.charAt(i)) returns -1 方法 returns i
  • i 是 s 的索引,如果有一个字符不在 String tecken

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

  if (tecken.indexOf(s.charAt(i)) == -1)
    return i;

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

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

这一行

return -1;

如果它没有找到任何字符,那么它将简单地 return -1,表明 none 个索引匹配条件。

对于Strings = "28723709dh23ha"和Stringtecken = "0123456789"会return8,也就是chard在strings = "28723709dh23ha"中的索引