JAVA - wydzielenie stringa spomiędzy dwóch znanych stringów

0

Cześć, mam pewien problem, z którym nie mogę się uporać. Chciałbym wydzielić string (nieznanej treści) spomiędzy dwóch znanych stringów (które mogą być różne). Generalnie coś na zasadzie funkcji tokenizer, ale po pierwsze: separator musiałby być stringiem a nie charem, a po drugie: separatory mogą być różne od siebie. Przykład:

Wiem, że w wyniku otrzymam String który wygląda tak: "Pojazd losowyString1 Urządzenie ; Pojazd drugiLosowyString Urządzenie". Chciałbym z tego stringa wyodrębnić "losowyString1" i "drugiLosowyString" i wrzucić je do tablicy. Z tablicą nie mam problemu. Tokenizer nie daje rady (separatorem musi być char), Split też nie (nie znam długości potencjalnych stringów- mogą być różne)... ma ktoś jakiś pomysł?

Pozdrawiam

0

split co spacja do tablicy stringów i najpierw bierzesz 1-wszy element a potem co 4ty?

edit

 
    public static void main(String[] args) {
        String str = "Pojazd losowyString1 Urządzenie ; Pojazd drugiLosowyString Urządzenie";
        giveMeStrings(str);
    }

    public static void giveMeStrings(final String str) {
        String[] splitted = str.split(" ");
        for (int i=1; i<splitted.length; i+=4) {
            System.out.println(splitted[i]);
        }
    }

output:

 
losowyString1
drugiLosowyString
1

Dziel i zwyciężaj ;)

Najpierw dzielisz po średniku, który będzie naturalnym separatorem dla kolejnych grup. Teraz wiadomo, że w grupa ma konstrukcję string string string i chcemy wyciągnąć drugi ze stringów. Zatem dzielimy po spacjach i gotowe.

String str = "Pojazd losowyString1 Urządzenie ; Pojazd drugiLosowyString Urządzenie";
String[] parts = str.split(";"); // dzielisz wg średnika
for(String part: parts){
   System.out.println(part.split(" ")[1]);
}

Jeżeli losowy string będzie zawierać spacje to po podziale po spacji należy odrzucić zewnętrzne elementy tablicy (aptrz System.arraycopy) i zrobić złączenie za pomocą pętli/streama jak ci wygodnie.

0

Prosto, bez regexów i bez dzielenia na tablice:

    public static List<String> findAllBetween(String leftToken, String rightToken, String string){
        List<String> result = new ArrayList<String>();
        int leftIndex = string.indexOf(leftToken);
        int rightIndex = string.indexOf(rightToken);

        while(leftIndex != -1 && rightIndex != -1){
            result.add(string.substring(leftIndex + leftToken.length(), rightIndex));
            leftIndex = string.indexOf(leftToken, rightIndex);
            rightIndex = string.indexOf(rightToken, leftIndex);
        }

        return result;
    }
0

Dzięki za wszystkie odpowiedzi :) W weekend popróbuję wszystkiego i dam znać.

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