Java .contains 不能与 charAt 一起使用

Java .contains cannot be used with charAt

java:类型不兼容:char 无法转换为 java.lang.CharSequence

boolean checkParentheses(String str) {
    Deque<Character> stack = new ArrayDeque<>();  

    String k = "({[";
    String s = ")]}";
    for (int i = 0; i < str.length();i++ ) {
        if (k.contains(str.charAt(i))) {
            stack.push(str.charAt(i));
        } else if (s.contains(str.charAt(i))) {

            if (matching(stack.peek()) == str.charAt(i)) {
                return true;
            }
        } else {
            return false;
        }
    }
} 

我应该使用什么来代替包含?

尝试使用 indexOf 而不是 contains。包含需要一个字符串(又名 CharSequence),但你有一个字符。您也可以参考:https://javamanikandan.blogspot.in/2018/01/java-string-indexof-method-example.htmlhttps://javamanikandan.blogspot.in/2018/01/java-string-contains-method-explained.html

indexOf 与 -1.

大致如下:

boolean checkParentheses(String str) {
    Deque<Character> stack = new ArrayDeque<>();

    String k = "({[";
    String s = ")]}";
    for (int i = 0; i < str.length();i++ ) {
        if (k.indexOf(str.charAt(i)) > -1) {
            stack.push(str.charAt(i));
        } else if (s.indexOf(str.charAt(i)) > -1) {

            if (matching(stack.peek()) == str.charAt(i)) {
                return true;
            }
        } else {
            return false;
        }
    }
    return false;
}

您也可以使用 contains 创建一个新的字符串。但是那个选项不是很好(更低效)。

第二个选项:

boolean checkParentheses(String str) {
    Deque<Character> stack = new ArrayDeque<>();

    String k = "({[";
    String s = ")]}";
    for (int i = 0; i < str.length(); i++) {
        if (k.contains(String.valueOf(str.charAt(i)))) {
            stack.push(str.charAt(i));
        } else if (s.contains(String.valueOf(str.charAt(i)))) {

            if (matching(stack.peek()) == str.charAt(i)) {
                return true;
            }
        } else{
            return false;
        }
    }
    return false;
}

第二个选项比较丑

试试这个

k.contains(""+str.charAt(i))

该方法包含适用于 String 对象而不是 Char