Получаване на подниз от низ след определена дума

Имам по-долу String.

ABC Results for draw no 2888

Бих искал да извлека 2888 от тук. Това означава, че трябва да извлека знаци след no в горния низ.

Винаги извличам числото след думата no. Низът не съдържа други no буквени комбинации другаде в него. Низът може да съдържа други числа и не е необходимо да ги извличам. Винаги ще има интервал преди числото и числото, което искам да извлека, винаги е в края на низа.

Как бих могъл да постигна това?


person Bishan    schedule 10.08.2014    source източник
comment
Може би съм аз, но вашият въпрос и по-специално вашите изисквания изглеждат непълни. Винаги ли ще извличате число след думата не? Низът няма ли да съдържа никакви други комбинации от букви другаде в него? Низът няма ли да съдържа други числа, които не искате или не искате да извлечете? Винаги ли има интервал преди числото? Числото винаги ли ще бъде в края на низа? Моля, помогнете ми да проясня объркващия ми мътен ум, като изясните вашите изисквания. Също така покажете какво сте опитали и ни кажете как не работи.   -  person Hovercraft Full Of Eels    schedule 10.08.2014
comment
@HovercraftFullOfEels Благодаря за вашия информативен коментар. Да, винаги извличам число след думата no. Низът не съдържа други буквени комбинации другаде в него. Низът може да съдържа други числа и не е необходимо да ги извличам. Винаги има интервал преди числото и Да, числото, което искам да извлека, винаги е в края на низа.   -  person Bishan    schedule 10.08.2014
comment
Благодаря за разяснението. Сигурен съм, че можете да разберете защо тази информация трябваше да присъства във вашия въпрос от самото начало.   -  person Hovercraft Full Of Eels    schedule 10.08.2014


Отговори (5)


Можете да опитате това

String example = "ABC Results for draw no 2888";
System.out.println(example.substring(example.lastIndexOf(" ") + 1));
person Rahul Tripathi    schedule 10.08.2014
comment
трябва да обясните това - person Mubashir Murtaza; 16.06.2021

Винаги искате да се стремите към нещо, което е лесно за конфигуриране и модифициране. Ето защо винаги препоръчвам да изберете Regex Pattern съвпадение спрямо други търсения.

Пример, помислете за това за вашия пример:

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Play {
  public static void main(String args[]) { 
    Pattern p = Pattern.compile("^(.*) Results for draw no (\\d+)$");
    Matcher m = p.matcher("ABC Results for draw no 2888");
    m.find();
    String groupName = m.group(1);
    String drawNumber = m.group(2);
    System.out.println("Group: "+groupName);
    System.out.println("Draw #: "+drawNumber);
  }
}

Сега от предоставения шаблон мога лесно да идентифицирам полезните части. Помага ми да идентифицирам проблемите и мога да идентифицирам допълнителни части в шаблона, които са полезни за мен (добавих името на групата).

Друго ясно предимство е, че мога лесно да съхранявам този модел външно в конфигурационен файл.

person YoYo    schedule 17.07.2015
comment
най-добрият отговор на въпроса // НО НЕ Е :( благодаря @YoYo - person prayagupd; 01.03.2017

можете също да направите нещо подобно

String demo="ABC Results for draw no 2888";

demo.substring(demo.indexOf("no") + 3)
person prachi julka    schedule 16.07.2020

За всеки, който желае да постигне това с вездесъщия Apache Commons StringUtils:

String parsed = StringUtils.substringAfter(yourString, "no ");
person Brujua    schedule 02.10.2020

person    schedule
comment
Вероятно трябва да добавите trim в края или да замените 2 с 3, за да получите само числото... и да добавите () след length. - person TNT; 10.08.2014
comment
също така направете .length извикване на функция: .length(), или се прекратява - person vwvan; 17.07.2015