2017-01-03 3 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

Это похоже на синтаксический анализатор, который был бы лучшим инструментом здесь, чем регулярное выражение. –

+0

Если это будет выполнено против любого произвольного кода, вам также понадобится какой-то способ идентификации круглых скобок, которые содержатся в литерале String или character, чтобы вы знали, что их игнорировать. Как Тим намекнул, для этого вам понадобится правильный парсер. – JonK

+0

Это звучит подозрительно, как курсовая работа ... – stephendnicholas

ответ

0

Тим прав. Это не должно выполняться регулярным выражением, а парсером. (Кстати, я не думаю, что можно использовать регулярное выражение). с анализатором вы бы в основном два варианта:

  1. Вы просканировать всю строку/файл один раз, и каким-то образом соединить possitions всех пар скобка. (Например, с помощью стека: каждая открывающая скобка подталкивает свое местоположение к этому стеклу, а закрывающая скобка просто выталкивает верхнюю часть стека и «регистрирует» это вместе со своим собственным местоположением в качестве пары »).

  2. возьмите местоположение скобки, которую хотите узнать о партнере, и пройдите код вперед или назад (зависит от типа скобки, которую вы выбрали) и добавьте каждую скобку (+1 для открытия -1 для закрывающей круглой скобки) до тех пор, пока вы встречаетесь друг с противоречием вашего выбранным.

какой из них следует использовать в зависимости от ваших потребностей/применения.

PS: помните, что если у вас есть строки, между которыми могут содержаться непарные круглые скобки, вам придется обязательно проигнорировать эти строки.

Надеюсь, это вам поможет.

Смежные вопросы