2017-01-03 64 views
0

的位置,我需要向後分析一些代碼,我試圖讓左括號的位置,問題是,在括號內有更多的括號,例如:得到開括號

customerPairs.leftOuterJoin(
      sc.textFile("C:/path/transactions_data.txt") 
       .mapToPair(new PairFunction<String, String, String>() { 
        public Tuple2<String, String> call(String s) { 
         String[] transactionSplit = s.split(","); 
         return new Tuple2<String, String>(transactionSplit[2], transactionSplit[3]+","+transactionSplit[1]); 
         } 
        })) 
      .groupByKey() 

所以讀完groupByKey方法,並找到第一個右括號後,我想知道在哪裏開始(與Eclipse一樣,例如)

+1

這aounds如可能解析器會在這裏更好的工具,比正則表達式。 –

+0

如果這將是對任意代碼運行,你還需要識別包含字符串或字符文字中,讓你知道要忽略這些括號的一些方法。正如Tim提到的那樣,您將需要一個合適的解析器來執行此操作。 – JonK

+0

這聽起來很像課程...... – stephendnicholas

回答

0

蒂姆是正確的。這不應該由正則表達式來完成,而應該由解析器完成。 (順便說一句,我不認爲這是可能的使用正則表達式)。 有了一個解析器,你會主要有兩種選擇:

  1. 您可以掃描整個字符串/文件一次,並且以某種方式連接所有的括號對的possitions。 (例如,通過使用堆棧:每個左括號將其位置推入該堆棧,並且右括號僅彈出堆棧的頂部,並將它與它自己的位置一起「註冊」爲一對「)

  2. 取括號的位置,你想知道的合作伙伴,並通過代碼走向前或向後(您選擇括號的類型depening)加起來每括號(+1對於一個右括號開口-1),直到你遇到一個與你選擇的一個矛盾。

哪一個你應該使用取決於你的需要/應用。

PS:記住,如果你有這之間的字符串可能含有未成對括號,你將不得不確保忽略這些字符串

希望這可以幫助你。