2013-10-28 47 views
0

我正在嘗試將代碼的源代碼劃分爲我想要的分隔符作爲\\s|+;,{}[]進行標記。但我在某種程度上失敗了,有什麼建議?使用分隔符進行Tokenize

public void tokenize() { 
     StringTokenizer st = new StringTokenizer(this.sourceCode, "\\s+|[;{}\\[\\]]", true); 

     int counter = 0; 

     while (st.hasMoreElements()) { 
      String token= (String) st.nextElement(); 
      tokenizedCode.put(counter, token.trim()); 
      counter++; 
     } 
} 

編輯:注意:沒有分隔記號化更正一下,我期待

我想int a=10;int,a,=,10

+0

Euhm你在哪裏失敗?什麼不行? – HamZa

+0

如果分隔符不起作用,我強調了你的看法? –

+0

對於您提供的新示例,您可以使用['\\ s + | [] [; {}] |(?==)|(?<==)'](http://regex101.com/r/bN0oT2)。注意源代碼的標記是一項艱鉅的任務,我的意思是如果我在'System.out.print(「這是一個等號=。沒什麼特別的)字符串中有';'或'='';' – HamZa

回答

1

StringTokenizer類並不需要一個正則表達式作爲參數,所以你可以這樣做,而不是構造函數:

StringTokenizer st = new StringTokenizer(this.sourceCode, " ;{}[]=", true); 

注意StringTokenizer是保留兼容性的原因,雖然其採用了傳統類在新代碼中不鼓勵。建議任何尋求此功能的人使用String或java.util.regex包的拆分方法。例如:

​​
+0

我確實需要保持分隔符:s –

0

構造函數的第三個參數使得它返回的分隔符也可以標記化。

+0

我知道,我希望發生這種情況,我的例子顯示:) –

+0

**我想要int a = 10;在int中進行標記,a,=,10 ** The;是不存在的預期結果 –

+0

我的不好:)謝謝你的觀察 –