Wyrażenie regularne

0

Hej!
Mam taki problem-mianowicie mam Stringa s = "abcqwe:fee:ppp::";
I chciałbym go podzielić po : z zastrzeżeniem że jak wcześniej napotka znak \ to żeby go nie dzielił,ma ktoś pomysł??Z góry dzięki

0
package test;


public class Test {

    public static void main(String[] args) throws Exception {
        String s = "abc:sdf:qwe\\:fee:ppp::";
        String[] split = splitRegex(s);
        for (String w : split) {
            System.out.println(w);
        }
    }

    private static String[] splitRegex(String s) {
        String[] split = s.split("(?<!\\\\):");
        for (int i = 0; i < split.length; ++i) {
            String w = split[i];
            int idx = w.indexOf('\\');
            if (idx != -1) {
                split[i] = w.substring(0, idx) + w.substring(1 + idx);
            }
        }
        return split;
    }
}

Wymyslilem na szybko takie cos z regexami. Zauwaz ze jesli chcesz sie pozbyc tych escapow \ to musisz je sam wyciac z danego slowa.

0

dzięki wielkie stary;)

0

możesz też zastosować 'Pattern'

String s = "abc:sdf:qwe\\:fee:ppp::";
String p = "(?<!\\\\):";

String[] result = Pattern.compile(p).split(s);
0

@up: przyjrzyj sie metodzie split, zajrzyj w jej zrodla.
Jak juz korzystac z Patterna a nie fasady split(), to najlepiej gdzies w statycznym final polu tego Patterna skompilowac, raz a dobrze, i pozniej sie do niego odwolywac.

0

@up tak wiem, ten przykład był tylko to pokazania zasady działania tej klasy
Edit:
Metoda split ze Stringa używa właśnie tego co pokazałem

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