# Array mit String vergleichen



## zero11 (27. Jul 2008)

Hallo zusammen!

Ich habe folgendes Problem:

Ich habe ein neues Array erstellt in dem Namen abgelegt werden

```
String namen[] = {"Hans", "Peter", "Klaus"};
```

Diese Namen werden dann in eine Liste eingefügt mit:


```
for (int zaehler = 0; zaehler < namen.length; zaehler++) 
        {
            list.add(""+(namen[zaehler]));
        }
```

bis hierhin klappt auch alles wunderbar...mit einem Klick auf einen Button wird der ausgewählte Name aus der Liste in ein Textfeld übergeben.

Jetzt möchte ich überprüfen-> Wenn ein bestimmtes Zeichen in dem Namen vorkommt, soll dieser Name in ein anderes Textfeld übergeben werden..nur da komm ich irgendwie net weiter...sry...bin noch Anfänger;(

evtl. mit ner for-Schleife und ner if-Abfrage ???...ich weiß nur nicht wie...

Vielen Dank im Voraus


----------



## diggaa1984 (27. Jul 2008)

da gibt es einige Möglichkeiten.
das ganze geschieht dann noch in der bereits vorhandenen for-schleife

Möglichkeiten: contains-Methode, indexOf-Methoden ... eventuell noch mehr 
(siehe: String-API)


```
for (int zaehler = 0; zaehler < namen.length; zaehler++) {
    if (namen[zaehler].indexOf(<was auch immer>) >= 0) {
        //<was auch immer> ist enthalten
    } else {
        //<was auch immer> ist nicht enthalten
    }
}
```

wäre eine Möglichkeit


----------



## 0x7F800000 (27. Jul 2008)

```
String.indexOf(char c)
```
liefert etwas negatives, wenn das zeichen nicht gefunden wird. Ansonsten die Position.


----------



## zero11 (28. Jul 2008)

Hey!

Erstmal vielen Dank für eure schnellen Antworten!!! :toll: 

Ich hab´s jetzt nen bisschen anders gelöst, aber es funktioniert
Im Textfeld1 sind die Namen aus der Liste enthalten und sie werden in das Textfeld2 übergeben, nur wenn sie in der namen.length enthalten sind...


```
for (int zaehler = 0; zaehler < namen.length; zaehler++) 
	    { 
            if (namen[zaehler].equalsIgnoreCase(textfeld1.getText()) ) 
            {
                textfeld2.setText(""+textfeld1.getText());
            }
        }
```

jetzt hab ich die Namen, die ins das Textfeld "reindürfen" ja auch drin...aber ich habe jetzt noch ein weiteres Textfeld mit Beträgen z.B. wieviel diese Person im Monat verdient...dieser Wert wird dann auch eingelesen aus nem Textfeld und an den Namen angehängt...is ja auch net so schwer...

```
textfeld2.setText(""+textfeld1.getText()+textfeld3.getText());
```

Ich würde jetzt gerne den Namen in dem Textfeld(bzw. ich werde die Namen wahrscheinlich in einer Liste ausgeben lassen) stehenlassen, aber nur die Beträge für die jeweilige Person immer wieder aufsummieren...also das nur die Summen in der Liste sich ändern, aber nicht die Namen?

Vielen Dank für eure Mühen im Voraus!


----------



## zero11 (29. Jul 2008)

hm...vielleicht mit replaceItem() oder so???

Danke im Voraus


----------



## Beni (29. Jul 2008)

Mal eine Frage, wieso machst du das hier?

```
""+textfeld1.getText()
```
?

"getText" gibt schon einen String zurück, den muss man doch nicht mehr umwandeln. Und da ein String immutable ist, besteht auch keine Gefahr dass er irgendwie von aussen verändert wird.

Also das sollte reichen:

```
textfeld1.getText()
```


----------



## zero11 (29. Jul 2008)

ja ich weiß...sry...ich hab´s mir leider so angewöhnt, da ich anfangs, wenn ich was in eine Liste schreiben wollte, z.B. list.add(""+irgendwas)...geschrieben habe...und bei den Textfeldern mach ich´s komischerweise auch...ist zwar überflüssig, aber na ja...danke für den Hinweis =)


----------



## zero11 (6. Aug 2008)

Also ich beschreib nochmal das Problem nen bisschen detaillierter:

Wie oben schon beschrieben hab ich eine Liste, in der die Namen importiert werden. Ich hab´s jetzt mit ner ArrayList gemacht.


```
ArrayList namen = new ArrayList();
namen.add("Hans");
namen.add("Peter");
```

Jeder dieser Elemente hat ja einen Index; In diesem Fall hat Hans den Index 0, Peter den Index 1, usw.

Jetzt wird ein Name aus der Liste ausgewählt und in ein Textfeld übergeben.


```
textfeld.setText(list.getSelectedItem());
```

Im nächsten Schritt wird verglichen, ob der Name im textfeld in der ArrayList "namen" enthalten ist (ich hab nämlich noch 3 weitere ArrayList) und in eine andere List übergeben (List2)


```
for(int i=0; i < (namen.size()-1); i++)
        {
            if(namen.get(i).equals(textfeld.getText()))
		    {
		    list2.add(textfeld.getText());
		    }
        }
```

Jeder der Namen in der ArrayList soll aber noch eine bestimmte Summe zugeordnet werden. Z.B. Lohn/Gehalt ; also einen Integer oder double-Wert. 
Wie bekomme ich es jetzt hin, dass wenn z.B. Peter in der Liste steht mit der Summe 0, und ich jetzt Peter nochmal auswähle und in die Liste mit einem Betrag von z.B. 1000 € hinzufüge. 

Es soll aber nur der Betrag ersetzt werden (von 0 auf 1000). Jeder Name hätte dann ja noch nen Index mit der entsprechenden Summe.

Mehrdimensionale Arrays kommen hier ja leider nicht in Frage, weil ich 2 verschiedene Datentypen (int, String) habe. Gibt es ne Möglichkeit, den entsprechenden Namen einen weiteren Index zuzuweisen (int summe) und dieses dann immer wieder zu aktualisieren ?

Vielen Dank im Voraus


----------



## SlaterB (6. Aug 2008)

speichere in der Liste keine Strings sondern Objekte vom Typ GehaltsMensch (oder schöner benannt)
mit Name und Gehalt

vielleicht ist auch eine Map<String,Integer> was für dich


----------



## zero11 (6. Aug 2008)

Hey, danke für die schnelle Antwort!

Könntest du mir evtl. nochmal nen Tipp für die Map geben...wie die aussehen könnte? Die Idee ist gut, aber ich hab bisher noch nie mit Maps gearbeitet   

Danke im Voraus


----------



## xysawq (6. Aug 2008)

```
Map<String,Integer> map = new HashMap<String,Integer>;

map.put("Hans", 1000);

-> map.get("Hans") == 1000

map.get("Hans") = 2000;

-> map.get("Hans") == 2000
```


----------



## zero11 (6. Aug 2008)

Hey

Ich hab´s jetzt mit ner HashMap probiert:


```
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Werner", 500);
map.put("Max", 1200);
map.put("Lisa", 700);
```

Wenn ich das Programm jetzt compiliere, dann sagt er mir "not a statement" und markert mir das Komma zwischen String und Integer an...  

import java.util.*; hab ich oben mit angegeben...

Diesen Fehler macht er aber nur bei VisualCafe...bei Netbeans läufts ohne Probleme ...hm.. komisch?


----------



## Guest (7. Aug 2008)

Dein VisualCafe ist vermutlich schon sehr kalt.  
Unterstützt keine Generics, die erst mit JDK 1.5 eingeführt wurden.


----------



## zero11 (7. Aug 2008)

Hey
ja...das könnte durchaus sein...ist glaub ich V4 oder so...die ist schon nen Tag älter...

hm...das ist ja nicht so toll   

würde das Bsp. von SlaterB denn auch net funktionieren? 
weil es müsste doch auch heißen:

```
ArrayList<Object> gehaltsmensch = new ArrayList<Object>();
```

oder wie schaut das aus?

Danke im Voraus


----------



## zero11 (8. Aug 2008)

Hey zusammen!

Ich hab´s jetzt folgendermaßen gemacht:

Die ArrayList bze. HashMap hab ich jetzt weggelassen und ne Klasse "Person" erstellt


```
public class Person
{
String name;
double summe = 0.0;
}
```

...dann:

```
Person Hans = new Person();
Hans.name = "Hans";
```
...usw...

Wie kann ich jetzt vergleichen, ob im TextfeldXY dieser Name auch in der Klasse vorkommt? 

Wenn ich es mit "equals" oder "compareTo" usw. versuche, kommt immer die Fehlermeldung: "cannot resolve Symbol: variable Person in class Frame1"...obwohl die Klasse im Projekt drin ist und 

```
Person Hans = new Person();
```
global deklariert ist...

Ich hoffe ihr seit nochmal gnädig und könnt mir nochmal nen Tipp geben   

...danke im Voraus!


----------



## SlaterB (8. Aug 2008)

poste (mehr) Code, komplette Klasse Frame1, nicht relevante Methoden kannst du ja auf
public x y(z) {
...
}
kürzen


----------



## zero11 (8. Aug 2008)

```
import java.io.*;
import java.util.*;
import java.text.*;
import javax.swing.*;
import java.awt.*;


public class Frame1 extends Frame
{
    long z = 0, z2=0; // nur für Zeitberechnung
    double b=0.0;
    double a=0.0;
    
    
    Person Hans = new Person(); 
    Person Peter = new Person();
    Person Dieter = new Person();
    Person Walter = new Person();
```
 so siehts ganz oben aus...also die globalen Variablen usw....der Rest darunter sind nur die ganzen Komponenten wie Labels, etc. und ihre Größen,etc.


und hier der Code für den Button:


```
void button1_ActionPerformed(java.awt.event.ActionEvent event)
	{
		// to do: code goes here.
		try
    {
        SimpleDateFormat df = new SimpleDateFormat( "dd-MM-yyyy" );
        SimpleDateFormat df2 = new SimpleDateFormat("HH:mm:ss");
        Date dt = new Date();
        z = dt.getTime();
        z2 = dt.getTime();
        String name = tf_name.getText();
        String bez = tf_klasse.getText();
        FileWriter fw = new FileWriter( "test.txt" );
        fw.write("Date: "+df.format(dt)+"\r\n");
        fw.write("Time: "+df2.format(dt)+"\r\n");
        fw.write( name+"\r\n"+bez+"\r\n" );
        fw.close();
        } catch ( IOException e ) 
         {
            System.out.println( "Konnte Datei nicht erstellen!" );
         }
}

Hans.name = "Hans";
Peter.name = "Peter";
Dieter.name = "Dieter";
Walter.name = "Walter";

}
```

Hier noch die Klasse:

```
public class Person
{
    String name;
    double summe = 0.0; 
}
```

So ... und wenn ich jetzt z.B. eingebe:

```
if (textfeldAB.getText().equals(Person))
{
irgendwas;
}
```

wirft er mir den Fehler aus, dass er die variable "Person" nicht finden kann

Normalerweise erhalte ich z.B. bei Eingabe textfeld.setText("blabla") nach dem "." einige Auswahlmöglichkeiten, was ich jetzt z.B. wählen möchte ; setText, getText usw.

Wenn ich jetzt z.B. Hans. eingebe, erhalte ich auch die Auswahlmöglichkeiten wie z.B. name, summe, equals, usw...hm...

Ich denk mal das es ganz simpel ist, aber ich finde es nicht


----------



## SlaterB (8. Aug 2008)

Person ist ja auch gar kein Variablenname sondern die Klasse selber
(das hätte man auch schon vorhin sehen können, ok  )


Code wie 
"Hallo".equals(String);
funktioniert ja auch nicht,
was soll der denn bewirken?


----------



## zero11 (8. Aug 2008)

es soll nachgeschaut werden, ob dieser Name zu dieser Klasse gehört. Wenn ja, dann wird er in eine AWT-List eingetragen, wenn nicht dann nicht. Ich werde die Klasse sicherlich noch aufteilen in "Mann" und "Frau" anstatt nur "Person".


----------



## zero11 (9. Aug 2008)

Hey!

Also ich hab mich jetzt mal von VisualCafe getrennt   und bin auf netbeans umgestiegen! Echt genial!
Hier klappt´s auch wunderbar mit der HashMap!...
Aber ihr wisst ja sicherlich was jetzt kommt  

Mein Anliegen:


```
HashMap<String, Double> Person = new HashMap<String, Double>();
```

Hab die Map jetzt nen bisschen gefüllt und in ner JList ausgegeben.


```
for( String blabla : Person.keySet())
        {
            jlist.add(blabla);
        }
```

Hab jetzt noch ne JTable angelegt mit 2 Spalten ("Person","Gehalt")

Kann mir jemand sagen, wie ich die HashMap in die JTable bekomme?

Das wär auch mein letztes Anliegen zu diesem Thema...ich glaub danach bin ich soweit fertig und werde nicht weiter nerven  

Danke im Voraus!


----------



## André Uhres (10. Aug 2008)

zero11 hat gesagt.:
			
		

> Kann mir jemand sagen, wie ich die HashMap in die JTable bekomme?


Zum Beispiel mit AbstractTableModel:

```
public class Test extends JFrame {
    HashMap<String, Double> person = new HashMap<String, Double>();
    public Test() {
...
        add(new JScrollPane(new JTable(new MyTableModel())));
    }
...
    class MyTableModel extends AbstractTableModel {
        public int getRowCount() {
            return person.size();
        }
        public int getColumnCount() {
            return 2;
        }
        public Object getValueAt(int rowIndex, int columnIndex) {
            Iterator<String> it = person.keySet().iterator();
            for (int row = 0; row < rowIndex; row++){
                it.next();
            }
            if(columnIndex == 0){
                return it.next();
            }else{
                return person.get(it.next());
            }
        }
    }
}
```


----------



## zero11 (10. Aug 2008)

Hey André...danke für die schnelle Antwort!!

Ich hab´s jetzt genau so übernommen...> keine Fehler  :wink: 

Aber irgendwie zeigt er mir nix an in der Tabelle  ...hmm


----------



## André Uhres (10. Aug 2008)

zero11 hat gesagt.:
			
		

> Aber irgendwie zeigt er mir nix an in der Tabelle


Dann ist die "HashMap<String, Double> person"  leer :wink:


----------

