Извлечь определенную подстроку из строки

Предположим, у меня есть такая строка:

String myExample = "Ticket Order 3748594 / 45 : blablabla"

Я хочу извлечь из него подстроку «3748594», как мне это сделать?

PS: Моя строка также может быть чем-то вроде: «ПРЕДУПРЕЖДЕНИЕ: Заказ билета 3748594/45: blablabla», «Заказ билета / номер /» не имеет предопределенной позиции.

Вы имеете в виду заменить "3748594" пустым? или получить номер, который находится между Order и /?

Scary Wombat 02.05.2018 10:27

регулярное выражение является обычным явлением в этой ситуации. хотя, если вы знаете позиции чисел, вы можете использовать String#subString

Jack Flamp 02.05.2018 10:27

Вы можете просто использовать myExample.substring(13, 20);, поскольку вы не указали никаких условий для извлечения.

Harshit 02.05.2018 10:29

@ScaryWombat Я хочу получить номер и вставить его в другой.

Mit94 02.05.2018 10:30

@HarshitShrivastava Да, я могу сделать это для этого примера, но я предпочитаю ссылаться на строку «Заказ билета» и получать числа, которые находятся сразу после.

Mit94 02.05.2018 10:33
Integer ticket = Integer.parseInt(myExample.replaceFirst("Ticket Order\\s+(\\d+).*", "$1"));
YCF_L 02.05.2018 10:36

Пожалуйста прочтите мой ответ

Sufiyan Ghori 02.05.2018 10:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
7
61
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

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

    String line = "Ticket Order 3748594 / 45 : blablabla";
    String pattern = "[0-9]{5,}"; //this means at least 5 length of digits

    // Create a Pattern object
    Pattern r = Pattern.compile(pattern);

    // Now create matcher object.
    Matcher m = r.matcher(line);

    if (m.find( )) {
        System.out.println("Found value: " + m.group(0) );
    }else {
        System.out.println("NO MATCH");
    }

Также, если ваш шаблон всегда похож на «Заказ билета [цифры]», вы можете использовать свой шаблон регулярного выражения как

    String pattern = "Ticket Order [0-9]{5,}";

Отлично, спасибо.

Mit94 02.05.2018 10:41

Все зависит от того, чего вы хотите.

Можно использовать простую выкройку \d+

Так:

Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher(myExample);
if (m.matches()) // or m.find()
{
    m.find();
    System.out.println(m.group(0)); // output is 3748594
    // m.group(1) is 45
}

избежать обратной косой черты в регулярном выражении: Pattern.compile("\\d+");

Jack Flamp 02.05.2018 10:42

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