0

我一直在尝试将这种字符串格式 "X -> i" 解析为 String["X"] 和 String["i"] 一段时间,但还没有让它工作。谁能帮我吗?

我试过了:

public String[] parse(){

     String s = "X -> i";

        String[] tokens = s.split(" -> ");

        for (String t : tokens)
          return new String myarray[] {t, t};
        return myarray[];

}

它不会编译,但我无法从逻辑上弄清楚问题出在哪里。

4

4 回答 4

1
public String[] parse(){
    String s = "X -> i";
    String[] tokens = s.split(" -> ");
    return tokens;
}
于 2012-12-04T02:42:41.850 回答
0

您的编译错误来自您有两个 return 语句的事实。你只需要一个。一旦您修复了此错误(您询问的错误),就必须考虑其他答案。

于 2012-12-04T02:42:21.533 回答
0

有几个“逻辑”问题:

  1. 您有 2 个返回语句并且没有花括号来分隔循环逻辑。(虽然不是必需的,但它是 java 约定,更好的可读性并减少了看不见的错误的机会。

    parse() {
        return new String myarray[] {t, t};
        return myarray[];
    }
    

    删除后者。

  2. 使用 var name 'myarray' 是多余的,删除它们保留 array [] 声明语法。

  3. 您正在使用一种方法。

    最好从方法中提取变量。

    public static String[] parse(String toParse) {
        return toParse.split(" -> ");
    }
    

从错误看来,您实际上希望以什么格式返回令牌?您是否想要 split 方法生成的实际令牌数组?或者你想要两个数组。这是后者的一些疯狂代码。

public String[][] parse(String toParse) {

    // String s = "X -> i";
    String[] tokens = toParse.split(" -> ");
    String[][] temp = new String[tokens.length][];

    int i = 0;
    for (String t : tokens) {
         temp[i++] = new String[] { t, t };
    }
    return temp;
}
于 2012-12-04T03:07:41.933 回答
0

它比那简单得多

public String[] parse(){

    String s = "X -> i";

    String[] tokens = s.split(" -> ");

    return tokens;
}
于 2012-12-04T02:40:57.647 回答