Исправлена ​​ошибка с заменой регулярных выражений в java - PullRequest
0 голосов
/ 01 марта 2020

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

1 ,   , 
  , a ,
  ,   , b

, когда результаты должны быть

1 , a , b

С новой строкой для следующего матча

Вот обе попытки, которые я пытался, это java

input.replaceAll("(1)|(a)|(b)" , "$1 , $2 , $3 \n");

и

(match.group(1) + "," + match.group(2) + "," + match.group(3));

файл анализируемый файл выглядит следующим образом, например:

1 a b

Как исправить выход, чтобы он не находился в шахматном порядке?

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Вот способ сделать это:

import java.util.regex.*;

public class Test
{
     public static String process(String s)
     {
         Pattern p = Pattern.compile("1|a|b");
         Matcher m = p.matcher(s);
         StringBuilder sb = new StringBuilder();
         while(m.find())
         {
             if(sb.length()>0)
                sb.append(" , ");
            sb.append(m.group());
         }
         return sb.toString();
     }

     public static void main(String[] args)
     {
         System.out.println(process("1 a b"));
     }
}
0 голосов
/ 01 марта 2020

Насколько я понимаю, это может помочь:

input.replaceAll("(1).*?(a).*?(b)" , "$1 , $2 , $3 \n");

Все будет захвачено с одной заменой.

Но, пожалуйста, объясните больше, какое поведение вы ожидаете, потому что это не совсем ясно, например, "с запятыми между каждым элементом в строке"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...