2014-11-18 4 views
0

Я хотел бы получить данные из строки на основе параметров из шаблона. Например:Извлечение данных из строки с использованием шаблона

given string -> "some text, var=20 another part param=45" 
template -> "some text, var=${var1} another part param=${var2}" 
result -> var1 = 20; var2 = 45 

Как я мог achive этот результат в Java. Есть ли некоторые библиотеки, или мне нужно использовать регулярное выражение? Я пробовал разные процессоры шаблонов, но у них нет необходимой функциональности, мне нужно что-то вроде обратного к ним.

+2

Да, использовать регулярное выражение. – khelwood

ответ

0

Я надеюсь, что ниже образец будет служить вашей цели -

String strValue = "some text, var=20 another part param=45"; 
    String strTemplate = "some text, var=${var1} another part param=${var2}"; 
    ArrayList<String> wildcards = new ArrayList<String>(); 
    StringBuffer outputBuffer = new StringBuffer(); 

    Pattern pat1 = Pattern.compile("(\\$\\{\\w*\\})"); 
    Matcher mat1 = pat1.matcher(strTemplate); 

    while (mat1.find()) 
    { 
     wildcards.add(mat1.group(1).replaceAll("\\$", "").replaceAll("\\{", "").replaceAll("\\}", "")); 
     strTemplate = strTemplate.replace(mat1.group(1), "(\\w*)"); 
    } 

    if(wildcards!= null && wildcards.size() > 0) 
    { 
     Pattern pat2 = Pattern.compile(strTemplate); 
     Matcher mat2 = pat2.matcher(strValue); 

     if (mat2.find()) 
     { 
      for(int i=0;i<wildcards.size();i++) 
      { 
       outputBuffer.append(wildcards.get(i)).append(" = "); 
       outputBuffer.append(mat2.group(i+1)); 
       if(i != wildcards.size()-1) 
       { 
        outputBuffer.append("; "); 
       } 
      } 
     } 
    } 

    System.out.println(outputBuffer.toString()); 
Смежные вопросы