使用Java流标记生成器.界面有点奇怪,但人们会习惯它:
http://docs.oracle.com/javase/7/docs/api/java/io/StreamTokenizer.html
解析所请求的String列表的示例代码(您可能希望直接使用tokenizer或至少使用Object列表,这样您可以直接将数字存储为Double):
public static List tokenize(String s) throws IOException {
StreamTokenizer tokenizer = new StreamTokenizer(new StringReader(s));
tokenizer.ordinaryChar('-'); // Don't parse minus as part of numbers.
tokenizer.ordinaryChar('/'); // Don't treat slash as a comment start.
List tokBuf = new ArrayList();
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: // operator
tokBuf.add(String.valueOf((char) tokenizer.ttype));
}
}
return tokBuf;
}
测试运行:
System.out.println(tokenize("4*x+5.2024*(Log(x,y)^z)-300.12"));
[4.0,*,x,+,5.2024,(,Log,y,),^,z,-,300.12]