Pocięcie stringa na fragmenty według zadanego separatora

0

Witam
Mam oto taki plik w którym znajduję się taka linijka, który następnie wczytuję do aplikacji napisanej w Javie.
0.000000|0.000000|23.720718|139.998062|161.018570|0.000000|602.661377|0|958.409607|0.190000|98.169357|43.733139|93.000000|0|0.000071|89.000000#0.042798|0.053497|0.026945|0.016245|0.009985#00000101100010#7607.350768|9.242230|-13351.865429#Volvo|FH12|1000.000000|0.000000|2500.000000|16|1|5|0.150000|65.000000|30.000000|10.000000|105.000000|22.000000|6
Chce aby ten string był pocięty po znakach "|" oraz "#", aktualnie używam takiego kodu do cięcia stringa ale on tylko tnie po znaku "|", następnie chce te dane pocięte przypisywać do zmiennych, które potem będę wysyłał do tabeli do odpowiednich kolumn w bazie danych za pomocą komendy INSERT INTO itd. oraz chce aby dana (00000101100010) była pocięta po każdej cyfrze, którą potem będę przypisywał do zmiennej boolean i ją też wysyłał do bazy danych.

try
        {
            Scanner sc = new Scanner(fd.getFiles()[0]);
            while(sc.hasNextLine())
            {
            	Scanner line = new Scanner(sc.nextLine());
                line.useDelimiter("\\|");
                while(line.hasNext())
                {
                	String linia= line.next();
                    System.out.println(linia);
                }
            }
        }
        catch(Exception e)
        {
            System.out.println(e);
        }

Czego mam użyć aby uzyskać to co chce, może metody split?

Z góry dzięki.

0

Jak zmodyfikować ten kod aby ładnie mi te dane przypisywał do zmiennych?

1

@Danix6 - przykłady użycia metody split znajdziesz w sieci, trzeba tylko poszukać.

2

A ja z przekory podam rozwiązanie bez metody split, za to bardziej pasujące do istniejącego kodu:

                line.useDelimiter("\\|");
                zmienna1 = line.next();
                zmienna2 = line.next();
                ...
1

Chce aby ten string był pocięty po znakach "|" oraz "#" [...] oraz chce aby wartość 00000101100010 była pocięta po każdej cyfrze [...]

Pociachaj, korzystając z multidelimetera - http://stackoverflow.com/questions/5993779/java-use-split-with-multiple-delimiters.
Następnie podziel Stringi, które odpowiadają wartości 00000101100010, korzystając z metody np. split() :P Przykład:

String binary = "00000101100010";
String[] binaryArray = binary.split("");
for (String i : binaryArray) {
     System.out.println(i);
}

A tu jeszcze odnośnik do rozwiązania http://stackoverflow.com/questions/1521921/splitting-words-into-letters-in-java.

0

Stringa "00000101100010", którego mam zapisanego w zmiennej dane_ele3, tne go takim sposobem, przypisuje to co pociąłem do zmiennej boolean i gdy wyświetlam wszystkie te zmienne to one zawsze przyjmują wartość false. Zmienna o nazwie hamulecReczny powinna przyjąć wartość true ponieważ jest 1. Dlaczego to nie chce działać w taki sposób jak ja chce? Jaki popełniłem błąd? Mówiąc prościej, chce aby każda pojedyncza cyfra była przypisana do zmiennej boolean lub int, ponieważ chce to później wysyłać do tabeli do bazy danych.
Możecie pomóc?
Z góry dzięki.

dane3 = dane_ele3.split("");
System.out.println("Elektryka: " + dane_ele3);
boolean lAdBlue = Boolean.valueOf(dane3[0]);
boolean lVolty = Boolean.valueOf(dane3[1]);
boolean hamulecGorski = Boolean.valueOf(dane3[2]);
boolean lPsiHamulce = Boolean.valueOf(dane3[3]);
boolean electric = Boolean.valueOf(dane3[4]);
boolean engine = Boolean.valueOf(dane3[5]);
boolean lFuel = Boolean.valueOf(dane3[6]);
boolean lIndicator = Boolean.valueOf(dane3[7]);
boolean rIndicator = Boolean.valueOf(dane3[8]);
boolean lBeam = Boolean.valueOf(dane3[9]);
boolean hBeam = Boolean.valueOf(dane3[10]);
boolean lPsiOlej = Boolean.valueOf(dane3[11]);
boolean hamulecReczny = Boolean.valueOf(dane3[12]);
boolean hTempWody = Boolean.valueOf(dane3[13]);
System.out.println("Niski poziom adblue: " + lAdBlue);
System.out.println("Niskie napięcie/Nie ładuje baterii: " + lVolty);
System.out.println("Aktywny hamulec bezpieczeństwa: " + hamulecGorski);
System.out.println("Niskie ciśnienie powietrza układu hamulcowego: " + lPsiHamulce);
System.out.println("Elekrtyka włączona: " + electric);
System.out.println("Silnik włączony: " + engine);
System.out.println("Niski poziom paliwa: " + lFuel);
System.out.println("Lewy kierunkowskaz: " + lIndicator);
System.out.println("Prawy kierunkowskaz: " + rIndicator);
System.out.println("Światła mijania: " + lBeam);
System.out.println("Światła drogowe: " + hBeam);
System.out.println("Ostrzeżenie o ciśnieniu oleju: " + lPsiOlej);
System.out.println("Zaciągnięty hamulec ręczny: " + hamulecReczny);
System.out.println("Wysoka temperatura wody: " + hTempWody);

usunięcie niepotrzebnych wcięć - @furious programming

1

Dokumentacja piękna rzecz: https://docs.oracle.com/javase/7/docs/api/java/lang/Boolean.html#valueOf(boolean). Widzisz tutaj, żeby metoda Boolean.valueOf() zamieniała wartości int na boolean? Ja nie widzę.

public boolean intToBoolean(int value) {
	return (value > 0) ? true : false;
}

Gdzieś tu jeszcze powinieneś zadbać, aby nie było możliwe bawienie się wartościami innymi niż 1 i 0.

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