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
Odpovídá na Zdeněk Svoboda
Libor Šimo (libcosenior):23.1.2017 16:05

Vytvoris prazdny retazec, aby si donho mohol pridavat v cykle jednotlive posunute znaky.

Odpovědět
23.1.2017 16:05
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Filip Gajdos
Člen
Avatar
Filip Gajdos:4.2.2017 15:14

/*

  • To change this license header, choose License Headers in Project Properties.
  • To change this template file, choose Tools | Templates
  • and open the template in the editor.

*/
package znaky;
import java.util.Arrays;

/**
*

  • @author filip212

*/
public class Znaky {

/**

  • @param args the command line arguments

*/
public static void main(String[] args) {
// TODO code application logic here

// retazec ktory chcem analyzovat
String ss = "Programátor sa zasekne v sprche, pretože inštrukcie na šampónu boli: Namydliť, umyť, opakovať.";
System.out.prin­tln(ss);
ss = ss.toLowerCase();

//Inicializacia pocitadiel
int pocetSamohlasok = 0;
int pocetSpoluhlasok = 0;

// definicia pola samohlasok a spoluhlasok
String[] samohlasky = {"a", "e", "i", "o", "u", "ä", "á", "é", "í", "ó", "ú", "ia", "ie", "iu", "ô"};
String[] spoluhlasky = {"d", "t", "n", "l", "h", "ch", "g", "h", "k", "ď", "ť", "ň", "ľ", "c", "č", "ž", "š", "dz", "ďz", "m", "b", "p", "v", "z", "s", "f", "r"};

// Hlavny cyklus
for (char c : ss.toCharArray())
{
for (int i = 0; i<15; i++)
{
if (samohlasky[i]­.contains(Strin­g.valueOf(c)))
pocetSamohlasok++;
}

for (int i = 0; i <27; i++)
{
if (spoluhlasky[i]­.contains(Strin­g.valueOf(c)))
pocetSpoluhlasok++;
}
}

//Vypis na konci
System.out.prin­tf("Pocet samohlasok = %d\n", pocetSamohlasok);
System.out.prin­tf("Pocet spoluhlasok = %d\n", pocetSpoluhlasok);
System.out.prin­tf("Pocet nepismennych znakov = %d", ss.length() - (pocetSamohlasok + pocetSpoluhlasok));
}

}

Tento kod mi normalne funguje pokial to mam v cestine vetu aj samohlasky a spoluhlasky dostavam rovnake vysledky ako v clanku pokial to ale prehodim do SVK jayzka dostavam
run:
Programátor sa zasekne v sprche, pretože inštrukcie na šampónu boli: Namydliť, umyť, opakovať.
Pocet samohlasok = 58
Pocet spoluhlasok = 53
Pocet nepismennych znakov = -17BUILD SUCCESSFUL (total time: 0 seconds)

 
Odpovědět
4.2.2017 15:14
Avatar
Michal813
Člen
Avatar
Michal813:10.3.2017 13:36

toto >>> "ie", "iu", "dz", "ďz" <<<< nie sú samohlásky a ni spoluhlásky, ale dvojhlásky - a tie ASCII nepozná ....

 
Odpovědět
10.3.2017 13:36
Avatar
Matěj Prášek:13.6.2017 17:22

Moje řešení Caesara s českou diakritikou :-)

package caesar;

import java.util.Scanner;

public class Caesar {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in, "Windows-1250");

        //abeceda jako pole charů
        char[] alphabet = "aábcčdďeéěfghiíjklmnňoópqrřsštťuúůvwxyýzž".toCharArray();

        System.out.println("Zadejte text pro šifrování:");
        String text = sc.nextLine().toLowerCase();

        System.out.println("Zadejte číslo pro šifrování:");
        int number = Integer.parseInt(sc.nextLine());

        boolean found;

        for(char c : text.toCharArray())
        {
            found = false;
            for(int i = 0; i < alphabet.length; i++)
            {
                if (c == alphabet[i])
                {
                    found = true;
                    System.out.print(alphabet[(i+number)%alphabet.length]);
                    break;
                }
            }
            if(!found)
                System.out.print(c);
        }
        System.out.println();
    }

}
 
Odpovědět
13.6.2017 17:22
Avatar
Michal Athanasios Devecka:21.6.2017 18:32

všetkému rozumiem v tvojom príklade, len tomu výstupnému výrazu akosi nie. vysvetlil by si tu [(i+number)%al­phabet.length]); ? nerozumime tomu %alphabet.lenght

dik.

 
Odpovědět
21.6.2017 18:32
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Michal Athanasios Devecka
gcx11:22.6.2017 9:33

Tomu se říká modulo a vrací zbytek po dělení tím číslem, v tomto případě velikost toho pole alphabet.

Pole má velikost 41 znaků, chceš například dělat posun o jeden znak z písmene 'ž'. Jeho pozice v pozice v poli je 40, takže:

(40+1)%41=41%41=0

dává pozici znaku po posunu, což je znak 'a'.

Taky by to šlo kontrolovat ifem, jestli jsi nejsi s indexem už mimo pole, ale toto je jednodušší.

 
Odpovědět
22.6.2017 9:33
Avatar
Michal Athanasios Devecka:26.6.2017 10:42

Všecko jasné, gcx. Opäť som o niečo múdrejší. ešte raz dik.

 
Odpovědět
26.6.2017 10:42
Avatar
Michal Stisek:7.8.2017 9:58

Docela by mě zajímalo řešení, jak odstranit ze vstupu uživatele mezery, otazníky, vykřičníky, apod a až potom to zakódovat. Zkouším to dlouhou chvíli, ale na to mám asi malej skill, kdyby jste někdo věděl, budu rád.

např. vstup: Ahoj to jsem já, jak se daří?
pro zašifrování by z toho bylo: ahojtojsemjajak­sedari

Asi bych si nepovolené znaky uložil do pole a s nimi dál pracoval, jako že by se při výskytu ve vstupu nahradily, ale fakt nevím jak... :-/

Odpovědět
7.8.2017 9:58
Jít pořád dál má smysl
Avatar
Michal Stisek:7.8.2017 10:08

Jediné co jsem dokázal je odstranění mezer v textu, takovým primitivním způsobem, ale chce to nějak ty povolené nebo zakázané znaky:

public class CaesarovaSifra {

    public static void main(String[] args) {
        // TODO inicializace promennych
        Scanner sc = new Scanner(System.in, "UTF-8");
        System.out.println("Zadej větu k zakódování...");
        String vstup = sc.nextLine();
        String zakazane = " ";
        String povolene = "";
        String veta = vstup.toLowerCase().trim().replace(zakazane, povolene);
        System.out.printf("Text k zakódování: %s\n", veta);
        String zprava = "";
        System.out.println("Zadej klíč o kolik dojde k posunu...");
        int posun = Integer.parseInt(sc.nextLine());

        // cyklus procházející jednotlivé znaky
        for (char c : veta.toCharArray()){
            int i = (int)c;
            i += posun;
            // kontrola přetečení
            if (i > (int)'z'){
                i -= 26;
            }
            char znak = (char)i;
            zprava = zprava + znak;
        }

        // výpis
        System.out.printf("Zašifrovaná zpráva: %s\n", zprava);
    }

}
Odpovědět
7.8.2017 10:08
Jít pořád dál má smysl
Avatar
pocitac770
Tvůrce
Avatar
Odpovídá na Michal Stisek
pocitac770:7.8.2017 21:51

Tip: vzhledem k tomu, že všemožných znaků jsou stovky, ba tisíce, tak je k ničemu vpisovat seznam nepovolených znaků... jednoduše si uděláš pole s povolenými znaky, poté projedeš string znak po znaku, jestli se onen znak nenachází v poli povolených znaků, tak ho odstraníš... (zde narazíš na další problém, ale to až později... Uvidíš)

 
Odpovědět
7.8.2017 21:51
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.