Какое правильное регулярное выражение для 24-часовых часов с поддержкой алфавита (java) - PullRequest
2 голосов
/ 08 января 2020

Вот программа:

public static boolean hasValidLengthAndSeparator(String s) {
  boolean answer = false;
  String text = s;
  String pattern = "([01a]?[0-9]+[b]?|2[0-3]+?):[c]?[d]?[0-5]?[0-9]?";

  Pattern r = Pattern.compile(pattern);
  Matcher m = r.matcher(text);


  if (m.find()) {
      answer = true;
  }
  else {
      answer = false;
  }
  return answer;
}

, когда я делаю тесты, она терпит неудачу в течение "1:30" (возвращает true, но не предполагает), как это исправить?

1 Ответ

2 голосов
/ 09 января 2020

ОТВЕТ: (?:[01a][\\db]|2[0-9b]):[0-9c][\\dd]

Предполагалось, что регулярное выражение позволит строке (-ам) подтвердить значение true, если длина равна 5, а третий символ - двоеточие, в противном случае - false.

Используя этот тестер:

@Test
  public void test09_hasValidLengthAndSeparator() {
    final String[] VALID = {"01:30", "ab:cd", "29:99"};
    for (int i = 0; i < VALID.length; i++) {
      String s = VALID[i];
      String error = 
          String.format("regextest.hasValidLengthAndSeparator(s) returned false for s = %s", s);
      assertTrue(error, lab0.hasValidLengthAndSeparator(s));
    }
    final String[] NOT_VALID = {"", "1:30", "01,23", "29:9"};
    for (int i = 0; i < NOT_VALID.length; i++) {
      String s = NOT_VALID[i];
      String error = 
          String.format("regextest.hasValidLengthAndSeparator(s) returned true for s = %s", s);
      assertFalse(error, regextest.hasValidLengthAndSeparator(s));
    }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...