2013-11-06 2 views
0

У меня есть строка, которая отформатирована как таковойразбираемой строки с Regex в Java

[dgdds,dfse][fsefsf,sefs][fsfs,fsef]

Как бы использовать Regex быстро разобрать это вернуть ArrayList с каждым значением, содержащим одну «запись» как таковой ?

ArrayList <String>: 

0(String): [dgdds,dfse] 

1(String): [fsefsf,sefs] 

2(String): [fsfs,fsef] 

Действительно с этим, любая помощь будет замечательной.

ответ

1

Вы можете использовать простой \[.*?\] регулярное выражение, которое означает: соответствует строке, начиная с [, потом ноль или более символов (но как можно короче, а не твоё жадно, именно поэтому ? в .*?), заканчивая ].

Это работает, вы можете проверить его на Ideone:

List<String> result = new ArrayList<String>(); 
String input = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]"; 
Pattern pattern = Pattern.compile("\\[.*?\\]"); 
Matcher matcher = pattern.matcher(input); 
while (matcher.find()) 
{ 
    result.add(matcher.group()); 
} 
System.out.println(result); 

Выход:

[[dgdds,dfse], [fsefsf,sefs], [fsfs,fsef]] 
3

Как насчет

String myData = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]"; 
List<String> list = new ArrayList<>(Arrays.asList(myData 
     .split("(?<=\\])"))); 

for (String s : list) 
    System.out.println(s); 

Выход:

[dgdds,dfse] 
[fsefsf,sefs] 
[fsfs,fsef] 

Это регулярное выражение будет использовать look behind механизм для разделения на каждом месте после ].

1

Вам может понадобиться сделать это в два прохода:

(1) Разделить из кронштейнами, если это просто 1D массив (не ясно, в вопросе):

String s = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]"; 
String[] sArray = s.split("\\[|\\]\\[|\\]"); 

(2) расщепляется запятыми, если вы хотите, чтобы также разделить, скажем, «dgdds, dfse»

sArray[i].split(","); 
3

вы должны попробовать Тхи s regex:
Pattern pattern = Pattern.compile ("\\ [\\ w *, \\ w * \\]");

2

Старый, легкий, удивительным образом :)

String s = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]"; 
     String[] token = s.split("]"); 
     for (String string : token) { 
      System.out.println(string + "]"); 
     } 
1

Мы можем использовать функцию split(regex) непосредственно путем экранирования "]": "\\]", а затем использовать его как regex для сопоставления с шаблоном:

String str = "[dgdds,dfse][fsefsf,sefs][fsfs,fsef]"; 
    String bal[] = str.split("\\]"); 

    ArrayList<String>finalList = new ArrayList<>(); 

    for(String s:bal) 
    { 
     finalList.add(s+"]"); 
    } 
    System.out.println(finalList); 
1

Split с помощью этого (?:(?<=\])|^)(?=\[) может работать, если нет ничего между ][

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