Eine Stelle eines Char- Arrays nach dem vorkommen in einem ganzem anderem Array überprüfen

DieKey

Mitglied
Hallo Leute!

Wir kriege ich es hin, dass ich z.B. die erste Stelle des Char- Arrays "chararray1" mit dem GANZEN Inhalt eines zweiten vergleichen kann? Also ob die erste Stelle des Char- Arrays in dem ganzen zweitem drin vor kommt?
Sprich:


Java:
chararray1[0] == chararray2[alle werte]


Würde mich über eine Antwort freuen

LG

DieKey
 
Würde das dann theoretisch gehen??

"instring" ist ein String, von einem Text den ich eingegeben habe und indem ich den String "tosearch" suchen möchte!

Java:
private void SearchPattern(String instring, String tosearch) {
char[] inarray =instring.toLowerCase().toCharArray();
char [] tosearcharray = tosearch.toLowerCase().toCharArray();

for (int i = 0; i == tosearcharray.length; i++) {
	if (inarray.equals(tosearcharray[i])) {
		
	}
	else {
		System.out.println("Muster im einegegebenem text nicht gefunden!");
	}
}
	}

Es geht darum das ich ein Muster finden möchte.


EDIT:

Ich weiß mit "String.split..." würde das in 3 zeilen gehen, ich habe aber den Auftrag bekommen das so zu machen!
 
Zuletzt bearbeitet:
"instring" ist ein String, von einem Text den ich eingegeben habe und indem ich den String "tosearch" suchen möchte!

[...]

Es geht darum das ich ein Muster finden möchte.

ich dacht eher an
Code:
"IrgendeinlagerTextString".contains("SuchString")
in einer einzigen Zeile...
Oder versteh ich jetzt einfach die Anforderung nicht?
 
Ähhm Jaein!

Ich darf das nicht auf "String- Ebene" sondern auf Char- Array Ebende machen...



@ hüteüberhüte:

was bedeutet "char c" ??
 
Würde das dann theoretisch gehen??

"instring" ist ein String, von einem Text den ich eingegeben habe und indem ich den String "tosearch" suchen möchte!

Java:
private void SearchPattern(String instring, String tosearch) {
char[] inarray =instring.toLowerCase().toCharArray();
char [] tosearcharray = tosearch.toLowerCase().toCharArray();

for (int i = 0; i == tosearcharray.length; i++) {
	if (inarray.equals(tosearcharray[i])) {
		
	}
	else {
		System.out.println("Muster im einegegebenem text nicht gefunden!");
	}
}
	}

Es geht darum das ich ein Muster finden möchte.
nein, du vergleichst hier einen char[] mit einem einzelnen char... das kann nicht gehen.

musst du rausfinden, ob der eine array irgendwie im anderen ist oder wirklich [c]contains[/c] von string nachbauen ?

also waere [c]hello[/c] dann in [c]Hiellametorie[/c] richtig ?
 
Nein, das währe falsch. Es müssen die Buschstaben hintereinander vorkommen:
Eingegebener Text:
Ich glaube das auto.

zu Suchendes Muster:
au

Vorkommnisse:
2 Mal bei:
Ich glaube das auto.

ALSO contains von String nachbauen!
 
[OT]So eine Aufgabe kann nur von nem IT-Dozenten kommen. Ich hasse sowas. Praxisfern bis zum geht nicht mehr. Da wird das Rad neu erfunden[/OT]

Na dann verarschen wir halt mal zurück :

Java:
    public static boolean isIn(char[] source, char[] target) {
        int targetCount = target.length;
        char first = target[0];
        int max = source.length - target.length;

        for (int i = 0; i <= max; i++) {
            if (source[i] != first) {
                while (++i <= max && source[i] != first)
                    ;
            }
            if (i <= max) {
                int j = i + 1;
                int end = j + targetCount - 1;
                for (int k = 0 + 1; j < end && source[j] == target[k];
                     j++, k++)
                    ;

                if (j == end) {
                    return true;
                }
            }
        }
        return false;
    }

Das tut ein contains... zumindest so ähnlich.
 
Er wird mir nie glauben das ich das geschrieben habe...
Abgesehen davon das ich den Quelltext nicht einmal richtig verstehe...😳

Gibt es Noch eine leichtere Variante? Sry.. Ich bin Java Anfänger seit erst 2 Wochen!
 
man kann es vielleicht etwas einfach schreiben, aber trivial ist es nicht.

Java:
    private static int find(char[] toLookIn, char[] search) {
        int counter = 0;
        for (int i = 0; i < toLookIn.length; i++) {
            // das erste zeichen ist gleich, nun alle anderen testen
            if (toLookIn[i] == search[0]) {
                int checkIndex = 1;
                // ueber alle zeichen von search gehen und schauen ob diese gleich sind
                while(checkIndex < search.length && toLookIn[i + checkIndex] == search[checkIndex]) {
                    checkIndex++;
                }
                // haben search komplett gefunden
                if (checkIndex == search.length) {
                    counter++;
                }
            }
        }
        return counter;
    }
gefahr koennte hier jedoch sein, dass [c]i + checkIndex > toLookIn.length[/c] ist
 
Er wird mir nie glauben das ich das geschrieben habe...
Abgesehen davon das ich den Quelltext nicht einmal richtig verstehe...😳

Gibt es Noch eine leichtere Variante? Sry.. Ich bin Java Anfänger seit erst 2 Wochen!

Nicht das ich wüsste. Das ist ein leicht abgeänderter Code wie das Original contains das ermittelt. Sofern mir keiner zuvor kommt (was ich gut fände) kann ich's am Abend mal lesbarer machen und kommentieren.
 
Was solls, ich vergesse es eh am Abend...
Hier mit Kommentaren in der Hoffnung das es deutlich wird was das so gemacht wird.

Java:
public static boolean isIn(char[] source, char[] target) {
        int targetCount = target.length;    
        //erst einmal die Länge des zu suchenden Strings

        char first = target[0];
        //nur zur Vereinfachung das erste Zeichen was wir suchen

        int max = source.length - target.length;
        //max... Wenn man im String "Hallo" das "lob" sucht kann man darauf verzichten die letzten beiden 
       //Zeichen zu untersuchen, der gesuchte Begriff kann darin nicht mehr vorkommen 

        for (int i = 0; i <= max; i++) {
            //Alles klar soweit, alle Zeichen durchgehen....
            if (source[i] != first) {
               //Sofern nicht das Zeichen bereits ein treffer ist
                while (++i <= max && source[i] != first)
                    ;
                //... und durchlaufen bis man auf eine Übereinstimmung trifft.
                //Der Original-Java Stil verlegt das hochzählen halt in den Schleifenkopf
                //Das ; als einzige Anweisung ist vollkommen legitim.
                //es geht natürlich ne klassischere Schleife
            }

            //Hier ist also eine Übereinstimmung gefunden
            if (i <= max) {
                //Es müsen noch genug Zeichen da sein damit der Suchbegriff gefunden werden kann
                int j = i + 1;
                //plus 1 weil wir vom ersten Zeichen ja schon wissen das es stimmt
                int end = j + targetCount - 1;
                //bis end muss geprüft werden (also nur sooft wie nötig, bei einem Suchbegriff aus 3
                //Zeichen braucht man nur noch die nächsten 2 zu prüfen
                
               for (int k = 0 + 1; j < end && source[j] == target[k];
                     j++, k++)
                //solange die Zeichen von source[j] und target[k] übereinstimmen
                //immer ein Zeichen vorrücken.   
                //int k = 0 +1 ist eine komische Notation wird aber verwendet weil man 
                //darauf hinweisen will das auch dort (wie bei j) ein Zeichen nach vorn gesprungen wird.
                ;

                if (j == end) {
                    //Wenn also jetzt die Anzahl der gefundenen Zeichen mit der Länge des Suchbegriffs
                    //übereinstimmen, ist das Wort komplett gefunden.
                    return true;
                }
            }
        }
        //sonst nüscht...
        return false;
    }
 
Ähhm Jaein!

Ich darf das nicht auf "String- Ebene" sondern auf Char- Array Ebende machen...



@ hüteüberhüte:

was bedeutet "char c" ??

Die Aufgabe ist ziemlich einfach, schau dir mal den Quellcode zu String#contains an, das andere ist eine for-each-Schleife, ungefähr so müsste das aussehen:

Java:
String s1 = "hello";
String s2 = "llo";
boolean b = false;

for (int i = 0; i <= s1.length() - s2.length(); i++) {
int j = 0;
while (j < s2.length() && s1.charAt(i + j) == s2.charAt(j))
j++;
if (j == s2.length()) {
b = true;
break;
}
}

System.out.println(
"s1: " + s1 +
", s2: " + s2 +
", contains: " + b);

Der Code erklärt sich selbst am besten... Wenn ihr direkt mit char[] arbeiten sollt, musst du das einfach nur dahingehend umschreiben.

Zu den Code von Voltaire81 kann ich noch sagen, dass er zu kompliziert aussieht und deshalb höchstwahrscheinlich falsch ist.
 
Zuletzt bearbeitet von einem Moderator:
Zu den Code von Voltaire81 kann ich noch sagen, dass er zu kompliziert aussieht und deshalb höchstwahrscheinlich falsch ist.

Lol, super Argument... 😀
Wenn du Code nicht verstehst ist er wahrscheinlich falsch.... wie geil ist das denn.

Was bekommst DU denn wenn du Dir den Code zu contains ansiehst?
Anscheinend etwas anderes als ich.
Müsste wenn ich mich noch recht entsinne auf ein indexOf rauslaufen... was wiederum so etwas tut wie die kopierte Passage.
 
falls du jemanden überzeugen willst, dass dein code nicht "falsch" ist, beweise dass er besser ist. 🙂
 
Zuletzt bearbeitet von einem Moderator:
Davon sprach ich garnicht, oder?
Das ist ein von Dozenten kreierter Fall der in Mumpf rausläuft. Kein Mensch in der Praxis würde das Rad derart neu erfinden.
Ich sagte nur das das contains genau das so in der Art tut, nicht mehr, nicht weniger.

Wenn ich mich hierin irre das contains daraus hinausläuft ist das ja nicht einmal ein Drama. Daher ja auch meine Frage was du erhälst wenn du die Methode zurück verfolgst. Interessiert mich.
 
Zuletzt bearbeitet:
mir war der code innerhalb der äußeren schleife einfach zu lang. entschuldigung, er kann natürlich auch richtig/schneller sein. weiß aber an dieser stelle nicht, weil nicht nachvollzogen. jedenfalls gibt es jetzt erstmal zwei variationen, die für diekey nützlich sein könnten. lass uns darauf einigen.
 
mir war der code innerhalb der äußeren schleife einfach zu lang. entschuldigung, er kann natürlich auch richtig/schneller sein. weiß aber an dieser stelle nicht, weil nicht nachvollzogen. jedenfalls gibt es jetzt erstmal zwei variationen, die für diekey nützlich sein könnten. lass uns darauf einigen.


Machn mer 🙂
Sah auch jut aus dein Part.
Ums nochmal zu sagen, auch für den TO, mein geposteter Source war keine Eigenerfindung, das war eine Passage aus den Original leicht abgewandelt.
 

Neue Themen


Zurück
Oben