如何检查单个字符是否出现在字符串中?

问题

在Java中有一种方法可以检查条件:

"这个单个字符是否出现在字符串x中"

没有使用循环?


#1 热门回答(201 赞)

你可以使用string.indexOf('a')

如果字符串中存在'a',则返回索引(> = 0)。如果不是,则返回-1。因此,非负返回值意味着字符串中存在"a"。


#2 热门回答(127 赞)

  • String.contains(),它检查字符串是否包含指定的char值序列
  • String.indexOf()返回指定字符或子字符串的第一个出现的字符串中的索引(此方法有4种变体)

#3 热门回答(28 赞)

我不确定原始海报究竟是在问什么。由于indexOf(...)和包含(...)两者都可能在内部使用循环,或许他正在寻找是否有可能没有循环?我可以想到两种方式,一种方法当然是复发:

public boolean containsChar(String s, char search) {
    if (s.length() == 0)
        return false;
    else
        return s.charAt(0) == search || containsChar(s.substring(1), search);
}

另一个不那么优雅,但完整性......:

/**
 * Works for strings of up to 5 characters
 */
public boolean containsChar(String s, char search) {
    if (s.length() > 5) throw IllegalArgumentException();

    try {
        if (s.charAt(0) == search) return true;
        if (s.charAt(1) == search) return true;
        if (s.charAt(2) == search) return true;
        if (s.charAt(3) == search) return true;
        if (s.charAt(4) == search) return true;
    } catch (IndexOutOfBoundsException e) {
        // this should never happen...
        return false;
    }
    return false;
}

当你需要支持更长和更长的字符串时,行数增加。但根本没有循环/重复。如果你担心该length()使用循环,你甚至可以删除长度检查。