Предположим, у меня есть такая строка:
String myExample = "Ticket Order 3748594 / 45 : blablabla"
Я хочу извлечь из него подстроку «3748594», как мне это сделать?
PS: Моя строка также может быть чем-то вроде: «ПРЕДУПРЕЖДЕНИЕ: Заказ билета 3748594/45: blablabla», «Заказ билета / номер /» не имеет предопределенной позиции.
регулярное выражение является обычным явлением в этой ситуации. хотя, если вы знаете позиции чисел, вы можете использовать String#subString
Вы можете просто использовать myExample.substring(13, 20);
, поскольку вы не указали никаких условий для извлечения.
@ScaryWombat Я хочу получить номер и вставить его в другой.
@HarshitShrivastava Да, я могу сделать это для этого примера, но я предпочитаю ссылаться на строку «Заказ билета» и получать числа, которые находятся сразу после.
Integer ticket = Integer.parseInt(myExample.replaceFirst("Ticket Order\\s+(\\d+).*", "$1"));
Пожалуйста прочтите мой ответ
Вы можете использовать регулярное выражение для этой ситуации, как показано ниже:
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,}";
Отлично, спасибо.
Все зависит от того, чего вы хотите.
Можно использовать простую выкройку \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+");
Вы имеете в виду заменить "3748594" пустым? или получить номер, который находится между
Order
и/
?