2014-09-04 72 views
0

標題可能不太清楚分隔每個字符串,但我所試圖做的是:爪哇 - 處理文本文件,以確定在一個空格或符號

對於文本文件的樣本線(也可是一個程序):

public static void main(String[] args){ 

我想建立每串的陣列以及用於每個符號。在這種情況下,行我想:

ArrayList x = ["public", "static", "void", "main", "(", "String","[","]","args",")","{"] 

我的第一個念頭是:

  1. 分割上的空格和所有符號串讓所有字符的字符串。
  2. 添加這些到ArrayList中
  3. 分割上的字符或什麼原線,以獲得符號
  4. 添加到ArrayList中

上做到這一點的最好辦法的任何想法?我無法真正看到一個明確的解決方案。

+0

雖然不確定,但似乎您正在嘗試進行詞法分析。在這種情況下,JFlex會很有幫助。 – ntalbs 2014-09-04 22:26:33

+0

@ cs2016是否必須與輸入行中的順序相同? – 2014-09-04 22:31:58

+0

我想模仿詞法分析的步驟,謝謝我會考慮 – asdf 2014-09-04 22:31:59

回答

2

可以使用這樣的正則表達式分割你的文字:

(?=[\s\W])|(?<=[\s\W]) 

Working demo

你有你自己的文字分裂如下:

enter image description here

您的代碼會成爲:

public void testSplit() 
{ 
    String str = "public static void main(String[] args){"; 
    String[] arr = str.split("(?=[\\s\\W])|(?<=[\\s\\W])"); 
    System.out.println(Arrays.asList(arr)); 
} 
// Print: 
// [public, , static, , void, , main, (, String, [, ], , args,), {, ] 

然後,您可以清理陣列中的空字符串。

0

雖然不是很優雅它你需要:

public static void main(String[] args) 
{ 
    String inputString = "public static void main(String[] args){"; 
    String charsToFind = "\\[\\]\\{\\}\\(\\)"; 
    String[] outputArray = (inputString.replaceAll("[^"+charsToFind+"]", "").replaceAll("(?!^)"," ") + inputString.replaceAll("[" + charsToFind + "]", " ")).replaceAll("\\s+", " ").split(" "); 
    System.out.println(Arrays.toString(outputArray)); 
} 

所以在這裏,我們首先必須定義要用作分隔符的使用(即charsToFind變量)的字符。 那麼什麼代碼所做的是:

  1. 它取代了一切,但定義的字符,並插入每兩個字符之間的空間。

    inputString.replaceAll("[^"+charsToFind+"]", "").replaceAll("(?!^)"," ")

  2. 這樣,你必須space分開只是你的特殊字符。

  3. 下它可以代替所有的特殊字符的空格並將結果添加到前一個

    + inputString.replaceAll("[" + charsToFind + "]", " ")

  4. ,並在最後它除去額外的空間和split一切還通過空間的String[]數組:

    .replaceAll("\\s+", " ").split(" ");

輸出:

[(, [, ],), {, public, static, void, main, String, args] 

通過菲德答案是更優雅,但創建陣列後,您需要刪除空項。我希望這個解決方案會有幫助。