# an String-Array weitere Werte anhängen



## magic_halli (18. Jan 2008)

Hi,

ich habe ein String[] sParam, welches bereits mit Werten gefüllt ist. Nun möchte ich an dieses gefüllte String-Array nachträglich noch weitere Werte anhängen. Wie mache ich sowas? Mittels probieren kam ich bis jetzt nicht weiter.

Danke und Gruß.


----------



## Gast (18. Jan 2008)

du versuchst als erstes die Länge des Arrays zu ermitteln und im Anschluss fügst du hinten an


----------



## SlaterB (18. Jan 2008)

wenn das Array voll ist, musst du ein neues Array erstellen
(oder eine dynamische Datenstruktur wie ArrayList verwenden)


----------



## magic_halli (18. Jan 2008)

> du versuchst als erstes die Länge des Arrays zu ermitteln und im Anschluss fügst du hinten an


Ok, aber wie füge ich syntaktisch hinten an? Die Länge ermitteln is kein Problem...

Wann ist das Array denn voll?


----------



## Gast (18. Jan 2008)

wenn dein Array nur eine bestimmte Größe hat, dann gar nicht, weil dann ist es voll - dann musst du SlaterB's Eintrag verwenden. Ansonsten fügst du einfach an die letzte Stelle an, so wie du die ersten Einträge auch hinzufügst.


----------



## Gast2 (18. Jan 2008)

```
String[] sParam=new String[10];

 for(int i=0;i<sParam.length;i++)
{
    if(sParam[i]==null)
    {
    sParam[i]=wert;
    break;
    }
}
```

oder dynamisch


```
ArrayList<String> sParam=new ArrayList<String>();
			sParam.add("String");
```


----------



## magic_halli (18. Jan 2008)

Mh, hier mal mein Beispiel:
Wenn sParam leer ist, dann werden einfach die extrahierten Werte reingeschrieben. Wenn sParam bereits Werte enthält, sollen weitere Werte einfach angehängt werden...
Die Werte werden aus einer/mehreren Zeile ('line') einer Textdatei extrahiert. Die Zeile(n) in der Textdatei sehen so aus:

```
/*Parameter:A,B,C,D
/*Parameter:E,F
```


```
String[] sParam = new String[]{};
String line;
String param = "/*Parameter:";

String path = curSession.GetCurrentDirectory();
BufferedReader buff = new BufferedReader(new FileReader(path + "relations.txt"));

//jede Zeile der Datei relations.txt durchgehen
while ((line = buff.readLine()) != null) {
     //wenn Marke /*Parameter gefunden und sParam noch leer ist, dann Werte extrahieren und in sParam schreiben (das funktioniert)
     if( (line.startsWith(param) == true) && sParam.length == 0 ){
          //zerlegt Zeile ab ":"+1 an Kommas in die jeweiligen Einzelteile und speichert diese in sParam ab 
          sParam = (line.split(":")[1]).split(",");
     }
     //wenn Marke /*Parameter erneut gefunden und  sParam schon Werte enthält, dann Werte extrahieren und an sParam anhängen (das funktioniert nicht!)
     else if( (line..startsWith(param) == true) && sParam.length > 0 ){
          int i = sParam.length;
          //hier jetzt irgendwie weitere Werte an sParam anhängen. Wie?
          ??????
     }
}
```


----------



## Gast2 (18. Jan 2008)

du erstellst ein leeres String array....
und wie gesagt da du nicht weißt wie groß dein String array ist dann nimm einen container der dynamisch ist siehe ArrayList....


----------



## Gast (18. Jan 2008)

wenn du die länger heraus hast, dann weißt du doch wo du ansetzen musst:

sParam[i+1] = deinString


----------



## Gast2 (18. Jan 2008)

wenn er seine länger heraus hat und +1 macht dann bekommt er eine Exception
java.lang.ArrayIndexOutOfBoundsException


----------



## Gast (18. Jan 2008)

ich kann man Array aber doch auch füllen ohne ihm eine feste Länge anzugeben, also weiß ich ja gar nicht wie groß es sein kann


----------



## DP (18. Jan 2008)

bei der erstellung musst du ja angeben die groß es sein soll...


----------



## MiMij (18. Jan 2008)

Deswegen sollst du ja ne ArrayList benutzten!


----------



## Gast (18. Jan 2008)

und wo gibt er das bei sich an??

```
String[] sParam = new String[]{};
```


----------



## magic_halli (18. Jan 2008)

Wenn ich weitere Werte anhängen will:

```
sParam[i+1] = (line.split(":")[1]).split(",");
```
Dann bekomme ich für diese schreibweise die Fehlermeldung: "Type mismatch: cannot convert from String[] to String". Aha?! Also so gehts nicht?!


----------



## Gast (18. Jan 2008)

du gibst ganz offensichtlich keinen einzelnen String zu dem Array hinzu sondern ein Array


----------



## MiMij (18. Jan 2008)

Hier mal nen Beispiel fuer ne ArrayList
http://www.anyexample.com/programming/java/java_arraylist_example.xml


----------



## magic_halli (18. Jan 2008)

Leider kann ich nicht so einfach auf ArrayList umsteigen, da die Verwendung meines 'String[] sParam' schon zutief im Programm verwurzelt ist!
Der Fall, dass noch weitere Werte hinzukommen, hat sich erst jetzt aufgeten.
Gibts denn da keine Möglichkeit, anahand meines Quellcodes "einfach" noch paar Werte an mein bereits gefülltes sParam anzuhängen (im else if-Zweig)?


----------



## MiMij (18. Jan 2008)

Wenn dein array ne feste Groesse hat, und dieses voll ist, kannst du nichts mehr anhaengen.
Du kannst hoechstens ein neues Array machen worin du die alten Werte eintraegst und die neuen dahinter


----------



## magic_halli (18. Jan 2008)

> Du kannst hoechstens ein neues Array machen worin du die alten Werte eintraegst und die neuen dahinter


Mh, ich denke, das würde mir auch schon weiterhelfen.
Aber wie erstelle ich ein neues String-Array, füge die Werte aus meinem sParam ein und hänge dann die neuen Werte noch hintenran?

Gruß


----------



## Gast2 (18. Jan 2008)

> und wo gibt er das bei sich an??
> Code:
> 
> 1
> ...



@Gast für mich ist das ein leeres Array 


1.es sollte keine Problem auf ne ArrayList umzusteigen eclispe zeigt dir über all die fehler an und du musst dann nur die get methode benutzen....

2. wenn dein array voll musst du ein neues machen und mit ner schleife befüllen


----------



## Guest (18. Jan 2008)

magic_halli hat gesagt.:
			
		

> Gibts denn da keine Möglichkeit, anahand meines Quellcodes "einfach" noch paar Werte an mein bereits gefülltes sParam anzuhängen (im else if-Zweig)?


Klar, aber schön ist das wie gesagt nicht.


```
int alteLaenge = sParam.length;
sParam = java.util.Arrays.copyOf(sParam, sParam.length + 1);
sParam[alteLaenge] = "neuer String";
```


Fred


----------



## Guest (18. Jan 2008)

Hm, noch ein bischen kompakter:


```
final int alteLaenge = sParam.length;
sParam = java.util.Arrays.copyOf(sParam, alteLaenge + 1);
sParam[alteLaenge] = "neuer String";
```


Fred (vielleicht sollte ich mich doch mal hier anmelden, um Posts editieren zu können


----------

