Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Anzahl bestimmter Zeichen in einem String ausgeben
ich versuche schon etwas länger nun darauf zu kommen wie ich es schaffe die Anzahl von bestimmten Zeichenfolgen in einem vom Scanner eingelesenen String auszugeben.#
Bin in etwa so weit und frage mich nun aber wie ich es schaffe damit zu zählen.
Java:
public static void stringtest() {
String input;
CharSequence[] c;
c = new CharSequence[3];
c[0] = "string1";
c[1] = "string2";
c[2] = "string3";
System.out.println("Input:");
input = s.nextLine();
wie schaffe ich es nun die anzahl der verschiedenen strings im input als zahl auszugeben?
checkt ein StringTokenizer nicht einfach nur einen Token und springt dann weiter zum nächsten?
Das würde in meinem Fall nicht helfen da die Zeichen auch ineinander verkettet sein könnten.
zB: Ich möchte folgende Eingabe "aeiou" auf das Vorkommen von "ae" "ei" "io" "ou" prüfen.
Die Ausgabe sollte dann: 4 lauten
jo danke, funktioniert super für das Beispiel.
Allerdings leider nicht wenn ich zB aeaeae eingebe - das zählt er nur einmal.
Ausserdem ist die Umsetzung mit patterns etc. wahrscheinlich etwas zu fortgeschritten, da ich soweit ich weiss in der Vorlesung noch nicht gehört habe. (uns wird nahegelegt es mit charAt() und / oder CharSequence() umzusetzen)
Habs deswegen mal so versucht:
Java:
public class StringTest {
public static void stringTest() {
String test = "aeiou";
int count = 0;
for(int i=0; i<test.length();i++)
{
if (test.charAt(i) == 'a' && test.charAt(i+1) == 'e');
count++;
if (test.charAt(i) == 'e' && test.charAt(i+1) == 'i');
count++;
if (test.charAt(i) == 'i' && test.charAt(i+1) == 'o');
count++;
if (test.charAt(i) == 'o' && test.charAt(i+1) == 'u');
count++;
}
System.out.println(count);
}
}
bekomm allerdings auch nur ne 1 in der ausgabe.
oder halt ne exception, da ich noch kein else drinhabe.
Die ersten beiden sind eher nur die Suche nach einem ganz bestimmten Inhalt. Das Pattern-Matching ist da schon etwas flexibler.
Die am einfachsten zu programmierende und am leichtesten zu verstehende Variante ist aber die Brute-Force-Variante:
Java:
class Main
{
public static void main(String[] args)
{
String txt = "aeixxxouxxxiooi";
String[] pats = {"ae", "ei", "io", "ou"}; // Patterns
int txtLen = txt.length(); // Textlänge
int patLen = 2; // Pattern-Länge
int patsCnt = pats.length; // Anzahl Patterns
int txtLast = txtLen - patLen; // bis zu welcher Text-Stelle nach einem Pattern gesucht wird
int cnt = 0;
for(int txtI = 0; txtI <= txtLast ; ++txtI) // Text durchlaufen
{
for(int i = 0; i < patsCnt; ++i) // Pattern wählen
{
String pat = pats[i];
// Pattern durchlaufen und Pattern-Zeichen mit Text-Zeichen vergleichen:
int patI = 0;
while(patI < patLen && pat.charAt(patI) == txt.charAt(txtI + patI))
{
++patI;
}
if(patI >= patLen)
{
++cnt;
System.out.println("Pattern " + pat + " gefunden auf Position " + txtI + ".");
}
}
}
System.out.println("Insgesamt " + cnt + " Patterns gefunden.");
}
}
Ausgabe:
Pattern ae gefunden auf Position 0.
Pattern ei gefunden auf Position 1.
Pattern ou gefunden auf Position 6.
Pattern io gefunden auf Position 11.
Insgesamt 4 Patterns gefunden.