【问题标题】:StreamTokenizer expected end characterStreamTokenizer 预期的结束字符
【发布时间】:2014-02-23 00:27:53
【问题描述】:

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

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

【问题讨论】:

    标签: java


    【解决方案1】:

    您有一个方法tokenize 嵌套在parseFormula 中。 Java 不允许嵌套方法。这就是编译错误的原因。将方法拆开后,以下编译正常:

    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){
    
    }
    

    【讨论】:

      【解决方案2】:
      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);
      }
      

      如果我没记错的话

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 1970-01-01
        • 1970-01-01
        • 2014-02-04
        相关资源
        最近更新 更多