Как удалить все после последнего числа в строке в Java?

Если у меня есть строка, состоящая из букв и цифр, как я могу избавиться от всего, что находится после последнего числа в строке?

Пример:

  • banana_orange_62_34_wednesday станет banana_orange_62_34
  • 1234_4564_www_6_j_1_rrrr станет 1234_4564_www_6_j_1

Я пробовал это до сих пор:

int endIndex = inputXMLFilename.lastIndexOf("\\d+");
inputXMLFilename = inputXMLFilename.substring(0, endIndex);

Покажите нам, что вы уже пробовали. SO - это не сайт "сделай это для меня".

Vladislav Varslavans 17.12.2020 20:52

Теперь, когда кто-то подчистил ваш пост, я это вижу. Я также вижу, что вы хотите вернуть все до последнего подчеркивания, а не последнее число.

The Head Rush 17.12.2020 20:52
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
167
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте замену регулярного выражения:

str = str.replaceAll("\\D+$", "");

Что означает регулярное выражение:

  • \D означает «не цифра»
  • + означает «один или несколько предыдущих терминов, жадный (как можно больше ввода)»
  • $ означает «конец ввода»

$ привязывает совпадение к концу, без которого это соответствовало бы (и удаляло) все нецифры.


lastIndexOf() работает только с обычным текстом, а не с регулярными выражениями.

Это сработало для меня. Я не знал, что знак доллара важен для этого, хотя

mastercool 17.12.2020 21:03

См. добавленное объяснение доллара

Bohemian 17.12.2020 21:09
@Test
public void cutAfterLastDigit() {
    String s = "banana_orange_62_34_wednesday";

    Pattern pattern = Pattern.compile("^(.*\\d)");
    Matcher matcher = pattern.matcher(s);
    if (matcher.find()) {
        System.out.println(matcher.group(0));
    }
}

Другие вопросы по теме