szukanie cyfry w nazwie przedmiotu

0

Witam mam pytanko ponieważ tworze sobie przedmioty których nazwy mniejwiecej tak wyglądają
#nr Jakaś_tam_nazwa
i mam taki problem jak pobierac ten numer? bo wiem że moge np tak
String t ="#12 Cies";
int nr = t.substring(1,2); i teraz przeskakuje # i np pobieram liczbe dla przykładów gdzie mam nr jedno cyfrowy zadziała ale co zrobić jeśli będe miał 2/3 cyfrową liczbe? wiem że moge zamiast 2 w substring dac 4 itp ale co się stanie jak wciągnie do tego inta spacje?
myslałem też nad takim wyjściem
Kod (java):

 int nr;
 try {
 nr =t.substring(1,3);
 } catch (NumberFormatException ignored) {
 nr = t.substring(1,2);
}
  • nie wiem czy to zadziała;/ jakieś porady?
0

Wydaje mi się, że wyrażenia regularne mogą pomóc. Przerobiony przykład ze stack'a:

String mydata = "some string with 35552 inside";
Pattern pattern = Pattern.compile("(\d+)");
Matcher matcher = pattern.matcher(mydata);
if (matcher.find())
{
    System.out.println(matcher.group(1));
} 

Powinno dać 35552.

http://stackoverflow.com/questions/4662215/how-to-extract-a-substring-using-regex

A jeśli wyraz zawsze się zaczyna # i kończy cyfrą to chyba nawet poprawniej będzie: "^#(\d+)$"

Jeśli \d nie działa to zawsze można użyć [0-9]

0

coś takiego nie wystarczy? https://ideone.com/jZKn1S

0

Z tego co rozumiem, chcesz mieć nazwę przedmiotu wraz z jego numerem. Dlaczego nie zrobisz tego na obiektach, żeby to miało ręce i nogi? Przykład:

class Item{
    private int id;
    private int magicNumber;
    private String name;
   //gettery i settery
}

Nie rozumiem natomiast dlaczego to robisz w taki dziwny sposób, przecież to będzie mordęga, gdy jak sam zauważyłeś liczba tych przedmiotów będzie duża. A moim zdaniem, nawet jeśli jest mała (1-9) już musisz się męczyć w jakieś dziwne parsowanie string'a. Stosowanie tutaj regex'ów mija się z celem.
Jeśli zastosujesz obiektowość to problem w magiczny sposób zniknie. W dodatku ułatwisz wykonywanie operacji na kolekcji tych obiektów.

0

ok mam to ale mam pytanie jeśli np mam przedmiot o takiej nazwie
"00.00.0000"
chodzi mi oto że jest jakby format 2 int.2int.4int
i jak np sprawdzać czy
String s = "20.10.1000";
ma format taki? "00.00.0000"?

0

moze regex? [0-9]{2}\.[0-9]{2}\.[0-9]{4}

0

mógłbyś pokazać sposób użycia?

0
StringBuffer sb = new StringBuffer("11223333");
sb.insert(2, ".").insert(5, ".");
System.out.println(sb);

wyniki:

11.22.3333

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.