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
dommynyk
Člen
Avatar
dommynyk:13.5.2018 15:02
Scanner sc = new Scanner(System.in);
                System.out.println("zdj ret: ");
                String mes = sc.nextLine();
                String dek = "";
                String abc = "abcdefghijklmnopqrstuvwxyz";
                String[] mor = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....",
                                "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-",
                                "...-", ".--", "-..-", "-.--", "--.."};
                mes.toLowerCase();
                //mes.trim();
                for(char znk : mes.toCharArray()) {
                        String mozn = null;
                        int index = 0;
                        for(int i = 0; i< mes.length(); i++) {
                                if(String.valueOf(abc.charAt(i)).equals(String.valueOf(znk)))
                                        index = i;
                                }
                                if(index >= 0) {
                                        dek += mor[index];
                                }
                        }
                        System.out.print(dek);
Odpovědět
13.5.2018 15:02
_________________________
Avatar
dommynyk
Člen
Avatar
dommynyk:15.5.2018 18:58

Mohlo by to byť aj takto? Myslím, že všetko funguje ako má. :)

Scanner sc = new Scanner(System.in);
               System.out.println("vety: ");
               String vty = sc.nextLine();
               String[] sml = {":) " ,":D ", ":P "};
               int smll = 0;
               String[] vt = vty.split(" ");
               String vs = "";
               String inte = "!.?";
               for(String v : vt) {
                   for(char h: inte.toCharArray()) {
                          if(String.valueOf(v).contains(String.valueOf(h))) {
                                  if(smll == 3) {
                                          smll = 0;
                                          vs += v.replace(String.valueOf(h), String.valueOf(sml[smll]));
                                  smll++;  break;
                                  }
                                  else {
                                   vs += v.replace(String.valueOf(h), String.valueOf(sml[smll]));
                                  smll++;
                                 }
                          }
                   }
            }
        System.out.println(vs);
Odpovědět
15.5.2018 18:58
_________________________
Avatar
Monika Badačová:14.8.2018 18:46

Prosím, neviete poradiť, kde je chyba?

String s = "ahoj";
System.out.prin­tf("Pôvodná správa: %s\n", s);

String sprava = "";

String []abecedneZnaky = {"a", "b", "c", "d", "e", "f", "g", "h",
"i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u",
"v", "w", "x", "y", "z"};
String[] morseoveZnaky = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....",
"..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-",
"...-", ".--", "-..-", "-.--", "--.."};

String []znaky = s.split(" ");

for (String abecedniZnak : znaky) {
char morseovZnak = '?';

int index = -1;
for (int i = 0; i < abecedneZnaky­.length; i++) {
if (abecedneZnaky[i]­.equals(abeced­niZnak))
index = i; }

if (index >= 0) { // znak nalezen
morseovZnak = morseoveZnaky[in­dex]; } //systém vypisuje: incompatible types: String cannot be converted to char
sprava += morseovZnak+" "; }
System.out.prin­tf("Dekódovaná zpráva: \n %s\n", sprava); } }

 
Odpovědět
14.8.2018 18:46
Avatar
Odpovídá na Monika Badačová
Matúš Olejník:14.8.2018 19:23

Ahoj problém je v tom, že morseovZnak máš typu char a morseoveZnaky je pole Stringov a teda morseoveZnaky[in­dex] bude typu String. Jedno riešenie by mohlo byť že morseovZnak prerobíš na typ String

Ak by si sa nudila, tu som ti napísal kratšiu verziu aj s komentármi :)

public String stringToMorseEncode(String msg) {

//    ASCII hodnota znaku A je 65 preto nepotrebujeme takto rucne ukladat pismena do pola
//    String[] abecedneZnaky = {"a", "b", "c", "d", "e", "f", "g", "h",
//        "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u",
//        "v", "w", "x", "y", "z"};

    //TODO pracovat s parametrom funkcie
    String povodnaSprava = "ahoj";
    System.out.printf("Pôvodná správa: %s\n", povodnaSprava);

    String vyslednaSprava = "";

    String[] morseoveZnaky = {
            ".-", "-...", "-.-.", "-..", ".",
            "..-.", "--.", "....", "..", ".---",
            "-.-", ".-..", "--", "-.", "---",
            ".--.", "--.-", ".-.", "...", "-",
            "..-", "...-", ".--", "-..-", "-.--",
            "--.."
    };

    //TODO doplnit kontrolu na ine znaky nez pismena atd
    for(int i = 0; i < povodnaSprava.length(); i++) {
        //String na pozicii i v povodnaSprava prevedieme na uperCase znak pretoze nizsie
        //od jeho ASCII hodnoty odratavame ASCII hodnotu znaku 'A' a vysledok pouzijeme ako
        //index do pola morseoveZnaky
        char znak = Character.toUpperCase(povodnaSprava.charAt(i));
        int asciiHodnota = (int) znak;

        //TODO pouzit StringBuilder - pozri Google ;)
        vyslednaSprava += morseoveZnaky[asciiHodnota - 65]; // alebo asciiHodnota - (int) 'A'
        vyslednaSprava += " ";
    }

    System.out.printf("Zakódovaná zpráva: \n %s\n", vyslednaSprava);

    return vyslednaSprava;
}
Editováno 14.8.2018 19:25
Odpovědět
14.8.2018 19:23
/* I am not sure why this works but it fixes the problem */
Avatar
Monika Badačová:14.8.2018 19:30

super :) ďakujem ti

 
Odpovědět
14.8.2018 19:30
Avatar
Libor Šimo (libcosenior):28.9.2018 6:32

Neviem, či si to niekto všimol, ale je tam chybička:
"CompareTo()
Umožňuje porovnat dva řetězce podle abecedy. Vrací -1 pokud je první řetězec před řetězcem v parametru, 0 pokud jsou stejné a 1 pokud je za ním:"

Vracia záporné alebo kladné číslo - rozdiel medzi umiestnením v abecede. Nula je jasná.

Odpovědět
28.9.2018 6:32
Aj tisícmíľová cesta musí začať jednoduchým krokom.
Avatar
Jiří Mareček:2.11.2018 11:59

Zdravím všechny!

Jsem úplný začátečník a zajímá mě jedna věc:
if (morseovyZnaky[i] - "i" v hranatých závorkách má indikovat, že se jedná o index pole morseovyZnaky?

Děkuji za Váš čas!

 
Odpovědět
2.11.2018 11:59
Avatar
Marek Hollý
Člen
Avatar
Marek Hollý:28.11.2018 16:44

Ahoj prosím vás v tej opačnej morzeovke je nutné dávať znaky abecedy do poľa stringov?

 
Odpovědět
28.11.2018 16:44
Avatar
Nessay
Člen
Avatar
Nessay:25.1.2019 14:45
System.out.println("Prosim zadaj spravu, ktoru zasifrujem do morzeovky:");
       String in = sc.nextLine();
       in = in.toLowerCase();
      String[] morseovyZnaky = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."};
       String morzeovka = "";
       String[] slova = in.split(" ");                                   // spravu rozdelime do slov
       for (String slovo : slova){
           String morzeovZnak = "?";
           int index = -1;
           int dlzkaSlova = 0 ;                                          // slova rozdelime do pismen a tie na ASCII hodnotu
               for (int i = 0; i < slovo.length(); i++){
                   dlzkaSlova ++;
               char pismenko = slovo.charAt(i);
               int o = (char)pismenko;
               index = o - 97;                                             // 97 je ASCII hodnota 'a' a pole zacina indexom '0'
               morzeovZnak = morseovyZnaky[index];
               morzeovka += morzeovZnak;
               if (dlzkaSlova == slovo.length()){
                   morzeovka += " ";
               }
           }
        }
        System.out.printf("Tvoja sprava v morzeovke vyzera takto: \"%s\"\n", morzeovka);

Da sa prosim vas "medzerovat" slova v sprave aj inak? (viem mohlo byt 2.
for (char pismenko : slovo.toCharA­rray())

 
Odpovědět
25.1.2019 14:45
Avatar
Matěj Bína
Člen
Avatar
Matěj Bína:23.3.2019 17:57

OK, takže... zpětnej překladač mi dělal blbiny kvůli tomu, že jsem se nemorseovské znaky snažil ošetřit přidáním

else {
        morseuvZnak = "?";
}

Prostě buď vypsal jedno písmeno a samý otazníky, nebo rovnou samý otazníky (proč překládal správně jenom písmeno z jsem se nikdy nedopátral).
Pak jsem viděl kód dommynyka o pár komentů výš, a když jsem za svůj kód u if přidal break; šlape to jak po másle.
Takže... je u if / else nutné používat break; nebo je možný, že chyba byla někde jinde?

 
Odpovědět
23.3.2019 17:57
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.