2014-02-23 44 views
1

我想實現一個tokenizer來解析數學輸入字符串到他們單獨的部分,我得到了什麼似乎是在第二行代碼中的一個微不足道的錯誤,因爲我發佈它期望一個;在線路中間的某處。StreamTokenizer預期結束字符

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

回答

1

你有一個方法tokenize嵌套在parseFormula。 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){ 

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

如果我沒有記錯