Java StreamTokenizer预期的结束字符

Java StreamTokenizer预期的结束字符,java,Java,我正在尝试实现一个标记器,将数学输入字符串解析为它们各自的部分,我在第二行代码中得到了一个看似微不足道的错误,因为我发布了它,它期望;线路中间的某个地方 public static void parseFormula(String text){ List<String> tokenize(String s) throws IOException { StreamTokenizer tokenizer = new StreamTokenizer(new St

我正在尝试实现一个标记器,将数学输入字符串解析为它们各自的部分,我在第二行代码中得到了一个看似微不足道的错误,因为我发布了它,它期望;线路中间的某个地方

public static void parseFormula(String text){
    List<String> tokenize(String s) throws IOException {
          StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(s));
          tokenizer.ordinaryChar('-'); 
          List<String> tokBuf = new ArrayList<String>();
          while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
            switch(tokenizer.ttype) {
              case StreamTokenizer.TT_NUMBER:
                tokBuf.add(String.valueOf(tokenizer.nval));
                break;
              case StreamTokenizer.TT_WORD:
                tokBuf.add(tokenizer.sval);
                break;
              default: 
                tokBuf.add(String.valueOf((char) tokenizer.ttype));
            }
          }
          return tokBuf; 
        }
}
公共静态公式(字符串文本){
列表标记化(字符串s)引发IOException{
StreamTokenizer tokenizer=新的StreamTokenizer(新的StringReader);
tokenizer.ordinaryChar('-');
List tokBuf=newarraylist();
while(tokenizer.nextToken()!=StreamTokenizer.TT_EOF){
开关(tokenizer.ttype){
案例StreamTokenizer.TT_编号:
add(String.valueOf(tokenizer.nval));
打破
case StreamTokenizer.TT_字:
tokBuf.add(tokenizer.sval);
打破
违约:
add(String.valueOf((char)tokenizer.ttype));
}
}
返回tokBuf;
}
}

您有一个嵌套在
parseFormula
中的方法
tokenize
。Java不允许嵌套方法。这就是编译错误的原因。分解这些方法后,以下代码将编译为ok:

List<String> tokenize(String s) throws IOException {
    StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(s));
    tokenizer.ordinaryChar('-'); 
    List<String> tokBuf = new ArrayList<String>();
    while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
      switch(tokenizer.ttype) {
        case StreamTokenizer.TT_NUMBER:
          tokBuf.add(String.valueOf(tokenizer.nval));
          break;
        case StreamTokenizer.TT_WORD:
          tokBuf.add(tokenizer.sval);
          break;
        default: 
          tokBuf.add(String.valueOf((char) tokenizer.ttype));
      }
    }
    return tokBuf; 
  }

public static void parseFormula(String text){

}
列表标记化(字符串s)引发IOException{
StreamTokenizer tokenizer=新的StreamTokenizer(新的StringReader);
tokenizer.ordinaryChar('-');
List tokBuf=newarraylist();
while(tokenizer.nextToken()!=StreamTokenizer.TT_EOF){
开关(tokenizer.ttype){
案例StreamTokenizer.TT_编号:
add(String.valueOf(tokenizer.nval));
打破
case StreamTokenizer.TT_字:
tokBuf.add(tokenizer.sval);
打破
违约:
add(String.valueOf((char)tokenizer.ttype));
}
}
返回tokBuf;
}
公共静态公式(字符串文本){
}
试试看{
列表标记化=新的ArrayList;
StreamTokenizer tokenizer=新的StreamTokenizer(新的StringReader);
tokenizer.ordinaryChar('-');
List tokBuf=newarraylist();
while(tokenizer.nextToken()!=StreamTokenizer.TT_EOF){
开关(tokenizer.ttype){
案例StreamTokenizer.TT_编号:
add(String.valueOf(tokenizer.nval));
打破
case StreamTokenizer.TT_字:
tokBuf.add(tokenizer.sval);
打破
违约:
add(String.valueOf((char)tokenizer.ttype));
}
}
}捕获(IOE异常){
系统输出打印ln(e);
}
如果我没弄错的话

try {
List<String> tokenize = new ArrayList<String>(s);

      StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(s));
      tokenizer.ordinaryChar('-'); 
      List<String> tokBuf = new ArrayList<String>();
      while (tokenizer.nextToken() != StreamTokenizer.TT_EOF) {
        switch(tokenizer.ttype) {
          case StreamTokenizer.TT_NUMBER:
            tokBuf.add(String.valueOf(tokenizer.nval));
            break;
          case StreamTokenizer.TT_WORD:
            tokBuf.add(tokenizer.sval);
            break;
          default: 
            tokBuf.add(String.valueOf((char) tokenizer.ttype));
        }
      }


}catch (IOException e){
  System.out.println(e);
}