Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.
Avatar
Enigma
Člen
Avatar
Enigma:16.4.2021 16:30

Dobrý den, chci poradit ohledně jednoho programu:
Vytvářím program s pomocí String() příkazů, na vstupu uživatel zadá textový řetězec (větu), poté zadá určité slovo nebo část slova, co chce vyhledat a program vypíše kolikrát se v dané větě(řetězci) vyskytuje hledaný výraz.
Už jsem zkoušel tento program vytvořit, ale z nějakého důvodu to nefunguje a já už si nevím rady.
S řetězci dělám asi necelý měsíc, proto ještě nejsem až tak zkušený.
Předem děkuji za odpověd.

Zkusil jsem: import java.util.Scanner;

public class StringCviceni4 {

public static void main(String args[]) {

String s1,s2;
Scanner sc= new Scanner(System.in);
System.out.prin­tln("Zadejte retezec:");
s1 = sc.nextLine();
System.out.prin­tln("Zadejte, co chcete najit:");
s2 = sc.nextLine();
int počet=0;
for (int j=0;j<s1.length();j++)
{
for (int k=0;k<s2.length();k++)
{
if(s2.charAt(k)==s1­.charAt(j)){
k++;
j++;
}
else
{
k=0;
for (int g=j;g<s1.length();g++)
{
if(s1.charAt(g)==' ')
{
j=g+1;
break;
}
if(g==s1.length()-1){
k=s2.length()+10;
j=s1.length()+10;
}
}
if(k==s2.length())
počet++;
}
}
System.out.prin­tln("cislo je: " + počet);
}
}
}

 
Odpovědět
16.4.2021 16:30
Avatar
Odpovídá na Enigma
Matúš Olejník:16.4.2021 17:43

Ahoj, hádam, že keď už mesiac robíte so Stringami tak ste preberali aj metódy ako indexOf, subString, length atď.

//todo kontrola na null alebo prazdne Stringy
public static int getSubstringOccurrenceCount(String stringWhereSearch, String stringWhatSearch){
    int count = 0;
    int offset = 0;

    while(true){
        offset = stringWhereSearch.indexOf(stringWhatSearch, offset);

        if(offset == -1){
            break;
        }

        count++;
        offset += stringWhatSearch.length();
    }
    return count;
}

Tebe bude stačiť zavolať

System.out.println(getSubstringOccurrenceCount(s1, s2));

V podstate len skracuješ danú vetu v ktorej hľadáš od toho indexu ktorý ti vráti metóda indexOf + dĺžka toho stringu ktorý hľadáš.

java.lang.String
public int indexOf(String str,
int fromIndex)
Returns the index within this string of the first occurrence of the specified substring, starting at the specified index.
The returned index is the smallest value k for which:
k >= fromIndex && this.startsWit­h(str, k)

If no such value of k exists, then -1 is returned.
Parameters:
str - the substring to search for.
fromIndex - the index from which to start the search.
Returns:
the index of the first occurrence of the specified substring, starting at the specified index, or -1 if there is no such occurrence.

Nahoru Odpovědět
16.4.2021 17:43
/* I am not sure why this works but it fixes the problem */
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 2 zpráv z 2.