2013-11-03 33 views
1

給出的表達式,如:在Java中從掃描儀讀取可變寬度令牌?

4*x+16-455 

我需要能夠單獨檢索令牌。因此,我需要:

4 
* 
x 
+ 
16 
- 
455 

我不能只用「nextInt()」,因爲它是所有一根弦 - 我該如何解決這個問題?我想到了操作員的分裂,然後在應該工作的兩者之間交替,但似乎應該有一個更簡單的方法來做到這一點。

+0

看看[shunting-yard算法](http://en.wikipedia.org/wiki/Shunting-yard_algorithm)。 – Jeffrey

+0

太棒了 - 我已經看過了。我的問題是 - 我如何定義一個令牌? –

+0

它看起來StringTokenizer可以做我想要的,其實.. –

回答

0

讀取整個字符串並將其拆分爲令牌的最簡單方法。您可以通過regexp選擇令牌。你舉的例子可以通過下面的正則表達式解析到令牌:

String s = "4*x+16-455"; 
Pattern p = Pattern.compile("([0-9]+|[a-z]+|[*//+//-])"); 
Matcher m = p.matcher(s); 
while(m.find()) { 
    System.out.println(m.group()); 
} 

輸出:

4 
* 
x 
+ 
16 
- 
455 

如果你需要更聰明分路器與很多不同的令牌,考慮修改正則表達式或更好地利用解釋器模式使您的解決方案更具可讀性