NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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
Alesh
Tvůrce
Avatar
Odpovídá na Petra Krulová
Alesh:9.9.2021 23:01

Jo, pěkně logicky do toho jdeš, to se mi libí. ;-) Hele nevím, já to zkoušel v NetBeans 8.2 a pokud jsem vzal tvůj kód, tedy včetně kódování UTF-8, tak mi to na to slovo "český", vyhodilo toto:

Zadej text k analýze:
český
Samohlásek: 1
Souhlásek: 2
Nepísmenných znaků: 2

Což sice není správně, ale aspoň něco to počítá, diakritiku to nahází do nepísmenných znaků.
Pokud nastavím kódování Windows-1250, pak už je výstup v pořádku:

Zadej text k analýze:
český
Samohlásek: 2
Souhlásek: 3
Nepísmenných znaků: 0

A zde už to běží bez problémů.
U tebe je divný, že to vrátí samé nuly. Pochopil bych, že by to u tebe ukazovalo něco jako u mě v tom prvním případě, že to ty znaky nahází mezi nepísmena. Co ti to vypíše, když dáš vypsat jen délku toho zadaného slova? Fakt mi to hlava nebere, že to je všechno na výstupu vynulovaný. :-)

 
Odpovědět
9.9.2021 23:01
Avatar
Odpovídá na Alesh
Petra Krulová:10.9.2021 12:22

Při výpisu délky slova "český" to hází zase 0, v případě slova "cesky" to počítá správně. Nevím, co s tím.

 
Odpovědět
10.9.2021 12:22
Avatar
Petra Krulová:10.9.2021 12:29

Ještě mě napadlo, jaký máš nastavený font? Nemohl by tam někde být zakopaný pes? Jsem úplný začátečník, takže je tohle pro mě trochu španělská vesnice. A děkuju za pomoc :-)

 
Odpovědět
10.9.2021 12:29
Avatar
Alesh
Tvůrce
Avatar
Odpovídá na Petra Krulová
Alesh:10.9.2021 13:07

A co ti to dělá, pokud si dáš vypsat jen délku textu? Protože ty tam pak počítáš tohle:

int nepismeno = text.length() - (pocetSamohl) - (pocetSouhl);

Tak by mě zajímal jen samotný výpis té délky řetězce.
Jinak ten program lze i prokrokovat, nastavit si watches, kde se ti v každé fázi programu zobrazí, co je v které proměnné.
Že by to bylo fontem mi nepřijde reálný.

 
Odpovědět
10.9.2021 13:07
Avatar
Odpovídá na Alesh
Petra Krulová:10.9.2021 15:24

Výpis délky slova to v případě slova začínajícího na "č" hází 0. Vlastně cokoli, kde se snažím pracovat se slovem s č, to po č už nic nezpracuje. Velké Č už to ale vyhodnotí, i když nesprávně.

 
Odpovědět
10.9.2021 15:24
Avatar
Odpovídá na Petra Krulová
Matúš Olejník:10.9.2021 17:09

Dávalo by zmysel, že ak začneš slovo s diakritikou a vypíše to pri všetkom 0, že sa dané slovo ani nenačítalo. Buď to musíš debugovať alebo skús vypísať dané slovo hneď po načítaní nech vidíme či sa skutočne nenačítalo.

Ak by to bol nejaký problém netbeansu tak môžeš skúsiť iné IDE, napr. IntelliJ Idea podľa mňa najlepšie IDE pre Javu.

Alebo skús do txt súboru napísať do riadkov rôzne problémové slová (veľké, malé atď...) a vypísať ich pomocou kódu nižšie. Ak aj tu napr. pri slove český vypíše dĺžku 0 tak budeme skúmať ďalej, ale myslim že takto by malo vypísať správne. Prípadne napíš aj operačný systém a verziu Javy.

import java.io.BufferedReader;
import java.io.FileReader;

class Scratch {
    public static void main(String[] args) throws Exception {
        try (BufferedReader reader = new BufferedReader(new FileReader("cesta/k/suboru.txt"))){
            String line = reader.readLine();
            while (line != null) {
                System.out.println(line.length());
                System.out.println(line);

                line = reader.readLine();
            }
        }
    }
}
Editováno 10.9.2021 17:09
Odpovědět
10.9.2021 17:09
/* I am not sure why this works but it fixes the problem */
Avatar
Atrament
Člen
Avatar
Odpovídá na Petra Krulová
Atrament:10.9.2021 19:15

Když to spouštíš ten program, tak v okně Output se ti zobrazuje na prvním řádku přesný příkaz který to provádí, je to ten co u tebe začíná 'cd c:\Users\Peťa...' Mohla bys ho prosím celý komplet zkopírovat a postnout sem?

Alesh a Matúš Olejník
Mám podezření že problém bude v mavenu v exec:exec, který je bohužel defaultní v Netbeans. Když totiž zkouším u sebe stejný kód s exec:java tak funguje bez problémů, kdežto s exec:exec to prostě nefunguje...

 
Odpovědět
10.9.2021 19:15
Avatar
Robert Michalovič:11.9.2021 5:36

2Petra Krulová : Štouráš se zbytečně do hloubky, zde na foru tak podrobně tato problematika není vysvětlena. Nejkvalitněji je problematika češtiny v českých zdrojím je objasněna v této knize ale je to histrorie z éry WinXP,Vista a i ta není úplně dokonalá.

Nejdříve vůbec doporučuji zkontrolovat jestli se ti to vůbec správně načetlo + navíc načtení v IDE vs přímo OS přes cmd není stejné.

String text = sc.nextLine().toLowerCase();
System.out.println("Test Vypisu Stringu : "+text);

Problémem v tomto případě je multiplatformnost Javy. Podpora různých OS, přerušení OS, low level věci v OS a znakových sad neumožnují vývojářům Javy vytvořit universální řešení. Navíc v pořátcích Javy se nepředpokládalo využívání konzole, tak se o to ani nepokoušely. Prostě v té době chyběl někdo kdo by těmto low level věcem na úrovni všech OS, které Java podporuje rozuměl a dal tomu "chaosu" jednoduchý a smysluplný řád. Na úrovni GUI už tento problém není, problémem je konzola.

 
Odpovědět
11.9.2021 5:36
Avatar
Odpovídá na Atrament
Petra Krulová:15.9.2021 13:00

Atrament , celý příkaz tady:
cd C:\Users\Peťa\Do­cuments\NetBe­ansProjects\tex­tretez; "JAVA_HOME=C:\\Pro­gram Files\\Eclipse Foundation\\jdk-16.0.2.7-hotspot" cmd /c "\"C:\\Program Files\\NetBeans-12.4\\netbean­s\\java\\maven\\bin\\mv­n.cmd\" -Dexec.vmArgs= -Dexec.args=\"${e­xec.vmArgs} -classpath %classpath ${exec.mainClass} ${exec.appArgs}\" -Dexec.appArgs= -Dexec.mainClas­s=cz.itnetwor­k.textretez.tex­tretez -Dexec.executa­ble=\"C:\\Pro­gram Files\\Eclipse Foundation\\jdk-16.0.2.7-hotspot\\bin\\j­ava.exe\" -Dmaven.ext.clas­s.path=\"C:\\Pro­gram Files\\NetBeans-12.4\\netbean­s\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 -q org.codehaus.mo­jo:exec-maven-plugin:3.0.0:exec"
Running NetBeans Compile On Save execution. Phase execution is skipped and output directories of dependency projects (with Compile on Save turned on) will be used instead of their jar artifacts.

 
Odpovědět
15.9.2021 13:00
Avatar
Odpovídá na Robert Michalovič
Petra Krulová:15.9.2021 13:10

Robert Michalovič,
bohužel ani načtení nefunguje.

Jsem opravdu úplný začátečník a snažím se jen najít nějaké řešení.
Pokud to není v nastavení a byl by problém ve verzi programu, vezmu to na vědomí a budu v budoucnu používat jiný.

 
Odpovědět
15.9.2021 13:10
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 115.