Как я могу получить номер из String с функцией endWith эффективно и с чистым кодом?

У меня есть входы, такие как "Test1","Test2"... и я просто пытаюсь найти конечный номер в этих строках. Я написал код ниже, но мне это не нравится. Как я могу улучшить этот код? Есть какой-нибудь совет?

 private int getEndNumber(final String str) {
    if (str.endsWith("1")) {
      return 1;
    } else if (str.endsWith("2")) {
      return 2;
    } else if (str.endsWith("3")) {
      return 3;
    } else if (str.endsWith("4")) {
      return 4;
    } else if (str.endsWith("5")) {
      return 5;
    } else if (str.endsWith("6")) {
      return 6;
    } else if (str.endsWith("7")) {
      return 7;
    } else {
      return 0;
    }
  }

3 ответа

Решение

Regex твой друг.

Pattern p = Pattern.compile("[0-9]+$"); // This regex matches the last number
Matcher m = p.matcher(str); // Create the matcher

//If the pattern matches then we get the matching string
if(m.find()) { 
    result = m.group();
}

Вы также можете перебрать строку в обратном порядке и проверить, являются ли символы целыми числами, но это довольно утомительно, чем использование регулярных выражений.

Есть хорошая статья о регулярных выражениях здесь http://www.vogella.com/tutorials/JavaRegularExpressions/article.html

Вы читаете это полностью и забываете все через несколько дней, как большинство из нас:-).

Один вкладыш - вернуть последний символ:

return Integer.parseInt(str.substring(str.length() - 1))); 

Если вы хотите вернуть 0 также, когда заканчивается 8 или же 9 вам нужно будет добавить немного логики к нему

Расширение от @user7294900, но многоканальное. В случае, если вы не хотите использовать регулярные выражения.

    private int getEndNumber(final String str) {
        Integer num = 0;
        try {
            num =  Integer.parseInt(str.substring(str.length() - 1)) ; 
            num = num >= 7 ? 0 : num;
        } catch (NumberFormatException ex) {
            num = 0;
        }
        return num;
    }
Другие вопросы по тегам