Stringvergleich

Status
Nicht offen für weitere Antworten.

shino

Mitglied
Hallo zusammen, ich müsst für die Uni mal wieder ein kleines Programm schreiben.
Dieses soll 2 Strings einlesen und dann miteinander vergleichen. es soll überprüfen ob string 2 in string 1 vorkommt. wenn er vorkommt soll es ausgeben, an welcher stelle dies beginnt. kommt er nicht vor, ist die ausgabe -1.
ich habe diesen code gebastelt.

Java:
public class Stringse {
	public static void main (String[] args) {
	String s1, s2, s3;
	s1 = args[0].toString();
	s2 = args[1].toString();
	s3 = args[2].toString();
	int a = 0;
	boolean bool1, bool2;
	bool1 = s1.contains(s2);
		if ( bool1 == false ) { a=-1 ; System.out.println(a);}
		else { a = s1.equalsIgnoreCase(s2) ; System.out.println("Der String s2 beginnt an der " + (-a+1) + "ten Stelle von s1."); }
	}
}

bei einer eingabe für s1 wie abcdefg und für string2 def gibt er das richtige aus... jedoch spinnt es wenn ich einen string 'bla ist ein blubb' den string blubb suche.

kann mir da jemand helfen?
 

eRaaaa

Top Contributor
a) wofür die 3 strings ??
b) wieso args[0].toString(); <-- was soll das?
c) in deinem else teil schreibst du
a = s1.equalsIgnoreCase(s2) <-- equalsIgnoreCase liefert ein boolean, a ist aber ein int --> kann nicht gehen :D

die fukntionsweise hab ich mir jetzt noch nciht weiter angeschaut, solltest erstmal diesen teil korrigieren
 

shino

Mitglied
args[0].toString(); speichert das 1. argument meiner eingabe (java Stringse arg1 arg2 arg3) unter s1

der 3. string ist noch für eine weitere aufgabe, die ich aber erst später beachte

oh ja, das mit dem equalsIgnoreCase hab ich da noch falsch gehabt, habs jetzt wieder in compareToIgnoreCase korrigiert, funktioniert aber weiterhin nicht.
 

eRaaaa

Top Contributor
schon klar, aber args[0] ist doch bereits ein string, wieso also da noch toString() aufrufen? ist doch quatsch.

deinen ansatz mit (compareToIgnoreCase ) versteh ich leider nicht. der vergleicht doch nur die beiden strings lexografisch ?!

mal doof gefragt, ist das eine übungsaufgabe aus der uni, oder brauchst du das für eine andere aufgabe ? denn die string klasse hat ja bereits genau diese methode schon die du eig. suchst :)

ansonsten vllt nochmal überlegne wie man das nachbauen könnte
wie würdest du denn, wenn dir jmd 2 wörter auf ein blatt papier schreibt, nachprüfen ob das 2. wort im ersten vorhandne ist? vllt hilft dir das ja weiter :D
 

shino

Mitglied
ja die aufgabe ist echt von der uni ^^
hmm, achso, ja das hab ich beim durchsehen der api wohl vergessen, das das lexikographisch is...

wie heisst denn diese methode? ich find in der java api einiges für vergleiche, aber n boolean ist ja eigentlich nicht was ich brauche..?
 

eRaaaa

Top Contributor
[c].indexOf(String s)[/c]

aber wenn du das nachbauen sollst, hilft dir das ja nun auch nichts in der api rumzusuchen.
da hilft nur: selbst nachdenken :)

welthallo - hallo = deine 2 strings. wie kannst du denn jetzt herausfinden, an welcher stelle in welthallo --> hallo beginnt ? :) musst ja erstmal die stelle finden, wo ein h steht, dann schauen, ob die nachfolgenden auch übereinstimmen, wenn nicht, schauen, ob es ggbfs noch ein h gibt , da auch wieder nachfolgende überprüfen. etc :)

ein beispiel..vllt fällt dir ja auch noch was anderes ein :D
 

shino

Mitglied
ah, danke.
ja mit dem gedanken bin ich noch gar nich ans problem ran. danke für die schnelle und kompetente hilfe.

wie lang braucht man, bis man so hinters programmieren sieht? ich mein, ich machs jetzt zwar erst seit 2 wochen, aber ich wünscht ich könnts schon schneller ;)
 

shino

Mitglied
hmm, hallo zusammen....
ich komm mit dem programm einfach nicht vorwärts. habs zwar mit der API schon geschafft, möchts nun aber auch ohne api packen...

Java:
public class Stringse {
	public static void main (String[] args) {
	String s1, s2, s3;
	s1 = args[0].toString();
	s2 = args[1].toString();
	s3 = args[2].toString();
	String temp;

/* Hier wird getestet ob s1 länger als s2 ist. Ist dies nicht der Fall, werden die beiden getauscht */
	if ( s1 < s2 ) {
		temp = s1;
		s1 = s2;
		s2 = temp; 
	}
	
/* Ist s2 in s1? */

nun fehlt mir der teil, der testet ob s2 in s1 vorkommt. ich dacht mir erst ich versuchs mit zwei for schleifen

Java:
		for (int i=0; i < s1.length(); i++) {
			for (int j=0; j < s2.length(); j++) {
			
			}
		}

ich denk hier an irgendwas mit if (s1.charAt(i) == s2.charAt(j)) {}
aber ich habe keinen plan ob das zu was führt, bzw. was das programm machen soll wenn die beiden chars dieselben sind. ich mein klar, es soll testen ob der nächste auch der selbe ist etc.

brauche echt hilfe, zerbrech mir schon seit knapp 3 stunden den kopf und komm auf keinen grünen zweig.
 

Landei

Top Contributor
Ungetestet:
Java:
int index = -1;
for(int i = 0; i < s1.length-s2.length; i++) {
   index = i;
   for(int j = 0; j < s2.length; j++) {
      if(s1.charAt(i+j) != s2.charAt(j)) {
         index = -1;
         break;
      }  
   }
   if (index > 0) break;
}
return index;
 

shino

Mitglied
Java:
public class Stringse {
	public static void main (String[] args) {
	String s1, s2, s3;
	s1 = args[0].toString();
	s2 = args[1].toString();
	s3 = args[2].toString();
	String temp;
	int index = -1;

/* Hier wird getestet ob s1 laenger als s2 ist. Ist dies nicht der Fall, werden die beiden getauscht */
		if ( s1.length() < s2.length() ) {
			temp = s1;
			s1 = s2;
			s2 = temp; 
		}
	
/* Ist s2 in s1? */
		for (int i=0; i < s1.length(); i++) {
			index = i;
			for (int j=0; j < s2.length(); j++) {
				if (s1.charAt(i+j) != s2.charAt(j)) {
					index = -1;
					break;
				}
			}
			if (index > 0) break;
			System.out.println(index);
		}

	}
	
}

so das ist mein momentaner code ne... wenn ich das jetzt kompiliere und teste mit den strings "alfabe" "ab" (und halt noch irgendwas für den dritten) sagt er mir 3x -1 ^^
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Die Ausgabe muss NACH der Schleife gemacht werden. Während der Schleife kann man da noch nichts genaues sagen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben