Как я могу получить номер из 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;
}