【问题标题】:Parsing Java String type Error解析Java字符串类型错误
【发布时间】:2014-02-18 17:50:16
【问题描述】:

我想做的是结合接口方法来完成给定字符串内变量的任务。给定的字符串“s”可以由数字、+、- 和 * 符号组成。整数返回相当简单,因为我所做的只是返回该 int 的整数接口方法。但是,对于其他 3 个符号,我需要递归地合并一个方法来查找左右节点。我已经在下面发布了我的代码...

public static Expression parseString( String s ) {
        String[] parse = s.split("\\s+");
        String[] parsecopy;
        Expression exp1;
        Expression exp2;

        if(s == null) {

            return null;
        }

        if(parse[0].equals("+")) {
            exp1 = parseString(parse[0]);
            parsecopy = Arrays.copyOfRange(parse, 2, parse.length);
            exp2 = parseString(parsecopy);
            return new AddExpression(exp1, exp2);
        }
        else if() {

问题 - 所以我的代码创建了原始字符串的副本以查找该字符串中的下一项。我通过使用 Array 函数 copyOfRange() 来做到这一点。但是,当我想调用 exp2 = parseString(parsecopy) 时,我收到一个错误,因为 parseString 接受了一个字符串参数,该参数必须是 String[] 类型。我试图获取 parsecopy 而不是 parsecopy[0] 的原因是因为 parsecopy 不会创建无限循环,我实际上可以遍历字符串。

Error code - The method parseString(String) in the type Parse is not applicable for the arguments (String[])

【问题讨论】:

    标签: java parsing


    【解决方案1】:
      if(parse[0].equals("+")) {
                exp1 = parseString(parse[0]);
                parsecopy = Arrays.copyOfRange(parse, 2, parse.length);
                exp2 = parseString(parsecopy);
                return new AddExpression(exp1, exp2);
            }
    

    exp1 = parseString(parse[0]);

    你在这里进行递归调用。

    【讨论】:

    • 问题是我在 parse[0] 处遇到了一个无休止的 while 循环
    • 它要求我必须做 parsecopy[0] 来代替 parsecopy
    【解决方案2】:

    由于您传递给 split 的参数是一个正则表达式,您可以简单地这样做:

    String[] ss = "12121+34234 *23423 -123123 *123123-12312+1231231-123123".split("\\s?[\\+\\-\\*]\\s?");
    

    这样你就可以在你得到 +、 - 或 * 的任何地方分割你的字符串(可能在之前或之后有一个空格)。

    请在拆分之前对字符串进行空值检查:D

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      您似乎想检查 parse[1] 是否等于“+”而不是 parse[0]。 你会期望 1 + 2 而不是 + 1 2。

      【讨论】:

        猜你喜欢
        • 2011-11-30
        • 1970-01-01
        • 2018-12-16
        • 1970-01-01
        • 2021-04-24
        • 2017-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多