Java Regex quickie - PullRequest
       3

Java Regex quickie

1 голос
/ 28 октября 2011

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

Я просто пытаюсь убедиться, что строка содержит только цифры, используя string.match(regex).Если он содержит какие-либо нечисловые символы, жестко запишите его 9999999.

Вот мой код.По сути, я проверяю, не содержит ли результаты, извлеченные из ResultSet moduleResults, нечисловые символы, прежде чем использовать его в setEndPointID, который принимает long в качестве параметра.trim() там, потому что в id_amr_module часто есть начальные пробелы, и я не хочу, чтобы они отбрасывали совпадение с регулярным выражением.Я также попробовал регулярное выражение [0-9] * безуспешно.

String strEndPointID = moduleResults.getString("id_amr_module");
strEndPointID.trim();
if(strEndPointID.matches("\\d*")){
  msiRF.setEndpointID(moduleResults.getLong("id_amr_module"));
}
else{
  long lngEndPointID = 99999999;
  msiRF.setEndpointID(lngEndPointID);
}

Ответы [ 3 ]

4 голосов
/ 28 октября 2011

Проблема в том, что ваше регулярное выражение ищет любое количество цифр. То, что вы ищете, выглядит примерно так: ^\d+$

  • ^ означает начало строки
  • \d+ означает хотя бы одну цифру
  • $ означает конец строки
4 голосов
/ 28 октября 2011

Вам нужно начальный и конечный якоря , чтобы убедиться, что вся строка числовая. Вам также нужно использовать + вместо *, поэтому что регулярное выражение соответствует как минимум 1 цифре (^\\d*$ будет соответствовать пустой строке). Полностью переработан:

long endPointID = 99999999;
String strEndPointID = moduleResults.getString("id_amr_module").trim();
if(strEndPointID.matches("^\\d+$")){
    endPointID = Long.parseLong(strEndPointID);
}
msiRF.setEndpointID(endPointID);
2 голосов
/ 28 октября 2011

Ваше регулярное выражение должно быть:

"^\\d*$"

^ - начать с начала \\d* - сопоставить столько цифр, сколько вы найдете $ - до достижения конца строки

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