【问题标题】:Java .contains cannot be used with charAt [duplicate]Java .contains 不能与 charAt 一起使用 [重复]
【发布时间】:2018-06-17 13:48:15
【问题描述】:

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;
        }
    }
} 

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

【问题讨论】:

  • k.indexOf(str.charAt(i)) != -1
  • k.contains(str.charAt(i) 没有接受字符的String.contains
  • 也许你应该问:我应该用什么来代替 str.charAt(i)。试试 s.contains(String.valueOf(str.charAt(i))
  • 尝试使用 indexOf 而不是包含。包含需要一个字符串(AKA CharSequence),但你有一个字符。也可以参考:javamanikandan.blogspot.in/2018/01/…

标签: java string parentheses


【解决方案1】:

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;
}

第二个选项相当难看。

【讨论】:

  • String.valueOf(str.charAt(i))
  • @JuanCarlosMendoza 谢谢。让我们更新答案。
  • 非常感谢您的帮助。我在包含“匹配”的 if 语句中有一个新错误。我应该为此创建一个新问题吗? pastebin.com/mXzULxn4
  • 不客气。是的,反正这家已经关门了。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    试试这个

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

    该方法包含适用于字符串对象而不是 Char

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-06
      • 2014-07-18
      • 2017-06-25
      • 1970-01-01
      相关资源
      最近更新 更多