# Stringvergleich



## shino (27. Okt 2009)

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. 


```
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 (27. Okt 2009)

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 

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


----------



## shino (27. Okt 2009)

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 (27. Okt 2009)

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


----------



## shino (27. Okt 2009)

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 (27. Okt 2009)

[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


----------



## shino (27. Okt 2009)

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 (2. Nov 2009)

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... 


```
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


```
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 (2. Nov 2009)

Ungetestet:

```
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 (2. Nov 2009)

```
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 ^^


----------



## Marco13 (2. Nov 2009)

Die Ausgabe muss NACH der Schleife gemacht werden. Während der Schleife kann man da noch nichts genaues sagen.


----------

