NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 14 - Textové řetězce v Javě podruhé - Práce s jednotlivými znaky

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
Jan Rypáček
Tvůrce
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. :-)

 
Odpovědět
18.8.2017 8:29
Avatar
Petr Zajac
Člen
Avatar
Odpovídá 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)

 
Odpovědět
9.2.2018 13:56
Avatar
Mrkev007
Člen
Avatar
Mrkev007:17.2.2018 20:19

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

 
Odpovědět
17.2.2018 20:19
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

 
Odpovědět
5.6.2018 13:59
Avatar
Odpovídá 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));
Odpovědět
5.6.2018 15:04
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovídá 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);
}

 
Odpovědět
5.6.2018 15:45
Avatar
Odpovídá 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.

Odpovědět
5.6.2018 16:12
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovídá 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" );

 
Odpovědět
5.6.2018 17:41
Avatar
Odpovídá 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ť.

Odpovědět
5.6.2018 18:37
/* I am not sure why this works but it fixes the problem */
Avatar
Odpovídá 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 :)

 
Odpovědět
5.6.2018 21:28
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 113.