2015-03-13 2 views
0

Как написать регулярное выражение в Java, которое задает определенный шаблон, извлекает значение после него и сохраняет его в массиве. Если после этого шаблона нет значения, он должен добавить пробел (i.e "") в массив.Регулярное выражение для извлечения значений после шаблона

В качестве примера для шаблона &&, я должен получить следующие входы и выходы:

input=&&&&&&&&&& 
    o/p=["","","",""]; 

    input=&&A&&123&&B&&985 
    o/p=["A",123,B,985]; 
    input=&& && &&A&&488 
    o/p=["","","A","488"] 
+0

взгляните на http://stackoverflow.com/questions/8405540/java-regular-expression –

+0

любое другое решение –

ответ

0

Вы можете попробовать использовать split. Вы можете опустить первый результат и использовать остальную часть из следующего кода.

String testStr = "&&A&&123&&B&&985"; 
String[] splitString = testStr.split("(&&)"); 
for (String token : splitString) { 
    System.out.println(token); 
} 
+0

, если между &&&& нет ничего, мне нужно пустое значение –

1

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

public String[] getTokens() { 
     LinkedList<String> list = new LinkedList<String>();   
     Scanner s = new Scanner(input).useDelimiter("\\&\\&"); 
     while(s.hasNext()) { 
      list.add(s.next()); 
     } 
     String[] a = new String[list.size()]; 
     return list.toArray(a); 
    } 
0
public static void main (String[] args) { 
    String str = "&&A&&&&&&D&&123&&XX&&"; 
    String delimiters = "([&]{2})"; 

    // analyzing the string 
    String[] tokensVal = str.split (delimiters); 

    System.out.print ("["); 
    for (String token: tokensVal) { 
     // Print empty and space tokens 
     if(token.isEmpty() || token.equals (" ")){ 
      System.out.print ("\"\","); 
     } else { 
      System.out.print (token + ","); 
     } 
    } 
    System.out.print ("]"); 
} 

O/P ["",A,"",D,] 

Существует одна проблема здесь, когда есть только & во всей строке, например, «& & & & & &», то вы должны справиться с этим особым образом.

0

Прошу прощения за то, что я не знаю Java, но, предполагая, что у нее есть возможность заменить и захватить, вы можете сделать это в два этапа.

Сначала было бы заменить любое вхождение

&& 

с

&&\s 

Второй будет перебирать захваченных результатов, возвращаемых из

&{2}([^&]+) 

и обрезки лишнего пространства с любыми результатами

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