NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 15 - Textové řetězce v Javě do třetice - Split a join

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Robert Vyskup:31.7.2021 22:31

Proč není funkční, když kódování do morseovky zjednoduším následovně

int pozice = s.charAt(i)); //zde musíme použít abeceda.indexOf(), jinak by to byla jen čísla
            zprava += morseovka[pozice] + " ";

Vynechal jsem indexOf a podle mojich chabých znalostí by to mělo stačit, ale nestačí :-@
Přece samotné s.charAt(i) získá jednotlivé indexy.

 
Odpovědět
31.7.2021 22:31
Avatar
Odpovídá na Atrament
Robert Vyskup:31.7.2021 23:27

Aha, a co ten můj poslední příspěvek. Je to taky přetypování char na int? Zajímavé ale je, že při jednoduším úkolu to projde:

String s = "Java";
        System.out.println(s);
        System.out.println(s.charAt(0));
        String cislaJava = "";
        for (int i = 0; i < s.length(); i++) {
            int index = s.charAt(i);
            cislaJava += index + " ";
        }
        System.out.println(cislaJava);
    }

Docela by mne zajímalo co se tam děje.

 
Odpovědět
31.7.2021 23:27
Avatar
Atrament
Člen
Avatar
Odpovídá na Robert Vyskup
Atrament:1.8.2021 1:12

Ne, s.charAt(i) ti nevrací 'jednotlivé indexy', ale znak na pozici i. Ten index musíš právě získat pomocí indexOf()

Pokud máš:

String abeceda = "abcdefghijklmnopqrstuvwxyz";
String[] morseovka = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....",
        "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-",
        "...-", ".--", "-..-", "-.--", "--.."};

a chceš převést písmeno g do morseovky tak získáš index písmene g v abeceda:

int index = abeceda.indexOf('g'); //index bude 6, protože na takové pozici je písmeno g ve stringu abeceda (nezapomeň že číslování začíná od nuly)

a s tímto indexem se pak podíváš do pole morseovka na pozici index, tedy 6 v tomto případě, jaký je tam znak

System.out.println(morseovka[index]); //vytiskne --. protože v poli morseovka je právě tohle na šestém místě
 
Odpovědět
1.8.2021 1:12
Avatar
Odpovídá na Atrament
Robert Vyskup:1.8.2021 3:00

OK ale proč pak funguje

String s = "Java";
        String cislaJava = "";
        for (int i = 0; i < s.length(); i++) {
            int index = s.charAt(i);
            cislaJava += index + " ";
        }
        System.out.println(cislaJava);
    }

A vytiskne to indexy těch písmen?

 
Odpovědět
1.8.2021 3:00
Avatar
Atrament
Člen
Avatar
Odpovídá na Robert Vyskup
Atrament:1.8.2021 3:48

Ne, neustále mícháš jablka a hrušky.

int index = s.charAt(i);

tímhle získáš ze stringu s znak na pozici i a protože ho vložíš do proměnné typu int tak vlastně uložíš ascii hodnotu znaku který je ve slově 'Java' na pozici i, to nemá s indexem v tom řetězci vůbec nic společného. Takže to co nakonec vytiskneš jsou ascii hodnoty jednotlivých znaků ve slově Java.

 
Odpovědět
1.8.2021 3:48
Avatar
Odpovídá na Atrament
Robert Vyskup:1.8.2021 11:56

Aha, takže toto je taky přetypování. Už to chápu. Díky moc.

 
Odpovědět
1.8.2021 11:56
Avatar
Robert Vyskup:1.8.2021 15:42

A další věc co mně napadla, ale nefunguje a nevím proč. Zkusil jsem nahradit

for (int i = 0; i < s.length(); i++)

to.CharArray

public static void main(String[] args) {
        String s = "leonardo";
        System.out.printf("Původní zpráva: %s\n", s);
        String zprava = "";
        String abeceda = "abcdefghijklmnopqrstuvwxyz";
        String[] morseovka = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....",
        "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-",
        "...-", ".--", "-..-", "-.--", "--.."};
        for (char c : s.toCharArray()) {
            int pozice = abeceda.indexOf(s.charAt(c)); //zde musíme použít abeceda.indexOf()
            zprava += morseovka[pozice] + " ";         //skrze pole morseovky jej pak dáme do zprávy
        }
        System.out.println("Zakódovaná zpráva je: " + zprava);
    }

Nechápu proč to nefunguje.

 
Odpovědět
1.8.2021 15:42
Avatar
Atrament
Člen
Avatar
Odpovídá na Robert Vyskup
Atrament:1.8.2021 15:58
int pozice = abeceda.indexOf(s.charAt(c));

chyba je na tomto řádku, proč tam zase cpeš to s.charAt(c)? :) Vždyť přece potřebuješ pozici toho znaku c ve stringu abeceda, takže prostě

int pozice = abeceda.indexOf(c);
Editováno 1.8.2021 15:59
 
Odpovědět
1.8.2021 15:58
Avatar
David Mravec
Člen
Avatar
David Mravec:9.8.2021 18:43

Zdravím, můžete mi, prosím někdo uvézt nějaký příklad na join()? Nějak mi to nechce fungovat a navíc NetBeans mi tuto metodu ani nevypíše v nabídce. Díky.

 
Odpovědět
9.8.2021 18:43
Avatar
Atrament
Člen
Avatar
Odpovídá na David Mravec
Atrament:10.8.2021 19:45
String[] ovoce = { "jablka", "pomeranče", "třešně", "hrušky" };
System.out.println("Seznam druhů ovoce: " + String.join(", ", ovoce));
 
Odpovědět
10.8.2021 19:45
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 127.