Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 14. diel - Textové reťazce v Jave - Práca s jednotlivými znakmi

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
Avatar
Jan Rypáček:18.8.2017 8:29

Zatím z mého pohledu nejlépe vysvětlený článek, pomohl mi lépe pochopit i některá předchozí témata. :-)

Avatar
Petr Zajac
Člen
Avatar
Odpovedá na pocitac770
Petr Zajac:9.2.2018 13:56

Na jaký další problém bych měl v takovém případě narazit?
V reakci na řešení od Michal Stisek mě napadlo následující
(jenom postup řešení, bez přepisu do JAVA)

  1. české znaky s diakritikou převedu v prvním cyklu na znaky bez diakritiky
  2. v druhém cyklu, kde už budu posouvat o počet znaků co zadá uživatel,

tak dám podmínku, pokud ASCII kód bude menší než "a", nebo větší než "z"
tak jsem našel "nepovolený znak" (nebudu zkoumat už jaký), který nebudu šifrovat,
ale přeskočím ho.
Tím pádem nepovolené znaky od uživatele vypustím. Jen mi zmizí do nenávratna a pokud bych chtěl zpětně "dekódovat", tak už tam "nepovolené znaky" nedodám .o)

Avatar
Mrkev007
Člen
Avatar
Mrkev007:17.2.2018 20:19

Výborně vysvětlené. Děkuji

Avatar
Lukáš Hlaváček:5.6.2018 13:59

Ahoj, chtěl bych vás poprosit o vysvětlení, proč nelze udělat zápis typu:

String retez = "abcd";
String retezobr = "";
retezobr = retez.charAt(2);
System.out.prin­tln(retezobr);

Moc děkuji

Avatar
Odpovedá na Lukáš Hlaváček
Matúš Olejník:5.6.2018 15:04

Ak si pozreš dokumentáciu k String#charAt(in­t),
tak táto funkcia vracia dátový typ char (znak na zadanom indexe z daného reťazca, konkrétne u teba znak 'c') a tvoja premenná retezobr je typu String.

Neviem čo presne chceš spraviť, ale ak chceš aby ti to nehádzalo chybu môžeš použiť funkciu Character#toS­tring(char) ktorá ti zo zadaného znaku vráti String

retezobr = Character.toString(retez.charAt(2));
Odpovedať
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovedá na Matúš Olejník
Lukáš Hlaváček:5.6.2018 15:45

Ahoj, chtel jsem dle 2. prikladu k lekci 8 vypsat retezec pozpatku a nemohl jsem prijit na to proc to lze i pres String v pripade, kdy retezobr prictu k promenne typu char v tomto pripade retezec.charAt(i); a samostatne mi to vypsat nelze.
String retezec = sc.nextLine();
String retezobr = "";
for (int i = retezec.length()-1; i>=0 ;i--) {
retezobr = retezobr + retezec.charAt(i);
System.out.prin­tln(retezobr);
}

Avatar
Odpovedá na Lukáš Hlaváček
Matúš Olejník:5.6.2018 16:12

V takomto prípade dochádza k implicitnej dátovej konverzii kedy znak, ktorý ti vráti funkcia charAt, je konvertovaný do Stringu a môžeš tak takým spôsobom ľahko "vyskladávať" reťazec.

Odpovedať
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovedá na Matúš Olejník
Lukáš Hlaváček:5.6.2018 17:41

Treti a slibuju, ze uz posledni dotaz:

Pouzil jsem nahore dle navodu Character.toS­tring..... retezobr to vypise spravne, a ikdyz se jedna o palindrom, na podminku nereaguje
String retezec = sc.nextLine();
String retezobr = "";
for (int i = retezec.length()-1; i>=0 ;i--) {
retezobr = Character.toS­tring(retezec­.charAt(i));
System.out.prin­t(retezobr); //pouze pro kontrolu
}
if (retezec.equal­s(retezobr))
System.out.prin­tln("Toto je palindrom" );

Avatar
Odpovedá na Lukáš Hlaváček
Matúš Olejník:5.6.2018 18:37

Prečo? Veď na to táto stránka je nie? :)

Tebe sa môže zdať že na konci ti vyšiel rovnaký reťazec aký bol ten pôvodný pretože jednotlivé písmená vypisuješ v cykle za sebou takže nepostrehneš že v premennej retezobr je na konci len jedno písmeno.

Preto nemôžeš v každej iterácii do tejto premennej priradiť len jedno písmeno, ale toto písmeno "prilepiť" k aktuálnemu slovu. Stačí teda zmeniť

retezobr = Character.toString(retezec.charAt(i));

na

retezobr += Character.toString(retezec.charAt(i));

A keďže sme tu spomínali tú implicitnú konverziu tak časť Character.toS­tring môžeš vynechať.

Odpovedať
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovedá na Matúš Olejník
Lukáš Hlaváček:5.6.2018 21:28

Ano, mas pravdu, ale rikal jsem si, jestli uz to moc neprehanim s tim vyptavanim. Jinak moc díky za pomoc, konecne mi to cele zapadlo v hlave dohromady :)

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 115.