2015-11-03 2 views
2

У меня есть следующая строка, в которой мне нужно разобрать/извлечь из нее «20000».примеры того, как разбирать строку в java

"where f_id = '20000' and (flag is true or flag is null)" 

Любые предложения по наилучшему способу сделать это?

Вот еще код, чтобы помочь понять:

List<ReportDto> reportDtoList = new ArrayList<ReportDto>(); 
for (Report report : reportList) { 
List<ReportDetailsDto> ReportDetailsDtoList = new ArrayList<ReportDetailsDto>(); 

ReportDto reportDto = new ReportDto(); 
reportDto.setReportId(report.getReportId()); 
reportDto.setReportName(report.getName()); 

Pattern p = Pattern.compile("=\\s'[0-9]+'"); 
String whereClause = report.getWhereClause(); 
Matcher m = p.matcher(whereClause); 

Confused о том, что делать после этого?

+2

Ваш вопрос является неполным. Пожалуйста, добавьте в нее больше деталей. – Pavan

+1

split выполнил бы работу –

+0

Мне в основном нужно получить это числовое значение и установить его в мой dto – Buccaneer

ответ

4

Вы можете использовать регулярное выражение для извлечения одного nonegative числа от вашего String

Pattern p = Pattern.compile("[0-9]+"); 
Matcher m = p.matcher(text); 

if (m.find()) { 
    System.out.println(m.group()); 
} 

Или, если вы хотите сохранить одиночные кавычки:

Pattern p = Pattern.compile("['0-9]+"); 

Это извлечет модель, которая включает в себя '=' и одно место после этого. Он напечатает String, содержащий номер без '=' или пробел. Так что, если это соответствует вы знаете, что есть ряд после '='

Pattern p = Pattern.compile("=\\s'[0-9]+"); 
Matcher m = p.matcher(text); 

if (m.find()) { 
    System.out.println(m.group().substring(3)); 
} 

EDIT на основе кода вы добавили это как это будет выглядеть

List<ReportDto> reportDtoList = new ArrayList<ReportDto>(); 
Pattern p = Pattern.compile("=\\s'[0-9]+"); 
for (Report report : reportList) { 
    List<ReportDetailsDto> ReportDetailsDtoList = new ArrayList<ReportDetailsDto>(); 

    ReportDto reportDto = new ReportDto(); 
    reportDto.setReportId(report.getReportId()); 
    reportDto.setReportName(report.getName()); 

    String whereClause = report.getWhereClause(); 
    Matcher m = p.matcher(whereClause); 
    if (m.find()) { 
     String foundThis = m.group().substring(3); 
     // do something with foundThis 
    } else { 
     // didn't find a number or = 
    } 
} 
+0

Должен ли я обернуть его внутри статута if, а затем проверить, содержит «=», а затем я могу разобрать номер внутри строки? . если (a.getWhereClause() содержит ("=") { aDto.setFId (a.getWhereClause() ..... } Здесь я немного запутанный – Buccaneer

+0

Спасибо Manos - есть то, что я могу добавить здесь, чтобы исключить одиночные кавычки возвращается в моей строке Когда я использую свой пример, то lastMatch для меня: «20000 » 10000 и т.д ... – Buccaneer

+0

к сожалению, я до сих пор немного испугался.Как я могу избавиться от одиночных кавычек? – Buccaneer

0

Попробуйте это:

Pattern p = Pattern.compile("-?\\d+"); 
String s = "your string here"; 
Matcher m = p.matcher(s); 
List<String> extracted = new ArrayList<String>(); 
while (m.find()) { 
    extracted.add(m.group()); 
} 
0

для поплавков и негативов

Pattern p = Pattern.compile("(-?\\d+)(\\.\\d+)?"); 
     String s = "where f_id = '20000' 3.2 and (flag is true or flag is null)"; 
     Matcher m = p.matcher(s); 
     List<String> extracted = new ArrayList<String>(); 
     while (m.find()) { 
      extracted.add(m.group()); 
     } 

     for (String g : extracted) 

      System.out.println(g); 

печатает

20000 
3.2 
+0

другой вопрос - как только я получу строковые значения, как бы установить это как переменную, а затем смогу преобразовать значение строки в целое число, чтобы я мог установить его в мой DTO? – Buccaneer

+0

вы можете просто использовать Integer.parseInt ("2000") – AbtPst

+0

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

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