Odpowiednie dzielenie tekstu

0

Witam mam pytanko mam taki tekst
name:Kubica,old:25,win:polska:2,pos:1,pos:2,pos:3
i mniej wiecej mam obiekt
kierowca
w którym mam

private String name;
private int old
private HashMap<String,Integer> wins = new HashMap<>();
private List<Integer> pos = new ArrayList<>();

i konstruktor

public kierowca(string name,int old,HashMap<String,Integer> win,ArrayList<Integer> pos){
this.name = name;
this.old = old;
this.win = win;
this.pos = pos;
}

i mam teraz

String first = "name:Kubica,old:25,win:polska:2,pos:1,pos:2,pos:3";

i chce zrobić

Kierowca A = new Kierowca(a,b,c,d);

i chce jakośc splitować/podzielić czy coś
w zmiennej 'a' ma byc Kubica
w zmiennej 'b' ma byc 25
w zmiennej 'c' ma byc jako key polska jako value 2
i w liscie 'd' ma byc po kolei 1,2,3
jak takie coś zrobić?
przedtem robiłem tak
kubica,25,polska:2,1,2,3
ale w tym wypadku musiałem wymusić wpisanie wszystkoch argumentów a chciałbym zrobić to tym wyżej sposobem;/

0

Czytaj jako całą linię, splituj po ":".

0

no ale jak mam splitować po :
to bede miał
name:
Kubica,old:
25,win:
polska:
2,pos:
1,pos:
2,pos:
3

 i takie coś mi zwróci
0

Rozbijaj po przecinku, potem po dwukropku, a potem wrzucaj do jakiejś mapy.

0

ok tylko jedno pytanko
mam np

String s = "name:super,opis:cos fajnego,, jest fajne";

i jak zrobić by np jeśli są x2 ,, koło siebie to nie splituje tylko wrzuca normalnie do zdania
i w zezultacie zwróci mi

super
cos fajnego, jest fajne
0

Na 99% w tym momencie musisz już napisać własny prosty parser :P

0

w jaki sposób;/?

0

Pczytaj sobie na temat Regular Expressions in Java. Temat jest dosyć obszerny. Ale jak przerobisz jakiś tutorial to spokojnie Ci to wystarczy do obsłużenia Twojego problemu :)

0

Przyłóż się do edycji postów, korzystaj ze znaczników <code><code></code></code> oraz <code><code class="java"></code></code>. W języku polskim nie ma czasownika splitować. Po kolejnym niedbałym poście wątek wyląduje w koszu,

0

Tradycyjnie: stwórz wytwórczą metodę statyczną kierowca.from(String line), która będzie zwracała obiekt typu kierowca. W środku to sparsuj.

Co do samego parsowania, to problemem jest to, że masz zbiór par klucz-wartość oraz listę w jednej linijce, wobec czego bez if-ów się nie obędzie. Użyj StringTokenizera do odczytu wartości, np:

    public static void main(String[] args){
        String input = "name:Kubica,old:25,win:polska:2,pos:1,pos:2,pos:3";

        StringTokenizer tokenizer = new StringTokenizer(input, ",");
        String token;
        while (tokenizer.hasMoreTokens()){
            token = tokenizer.nextToken();
            if(token.startsWith("win")){
                // handle winner
                System.out.println("winnerToken: " +token);
            } else if(token.startsWith("pos")){
                // handle pos
                System.out.println("posToken: " +token);
            } else if(token.startsWith("old")){
                // handle age
                System.out.println("oldToken: " +token);
            } else if(token.startsWith("name")){
                // handle name
                System.out.println("nameToken: " +token);
            }
        }
    }

Ewentualnie przejdź na jakiś normalny format zapisu (JSON?) i mapuj automatycznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1