2010-12-28 8 views
0

Ich habe eine Liste in einem Array, jeder Eintrag enthält entweder o: oder g: vor einem Wort wie o: word oder g: word . Ich möchte 2 Funktionen, eine, um ein Array mit nur der g: 's und eins, um ein Array mit nur der 0:Java: Teil eines Strings in einem String Array finden und ein neues Array erstellen

machen Ich möchte auch die g:' s und o: 's beschnitten werden aus dem Ergebnis. Ich bin mir nicht sicher, wie ich das machen soll, ohne Array-Fehler zu verursachen, also fragte ich mich, ob mir jemand ein Beispiel geben könnte.

+0

Ist es in Ordnung, die anfängliche Array zu vermasseln? – Landei

+0

Immer, wenn Sie sich fragen, wie Sie etwas tun können, ohne Array-Out-of-Bounds-Fehler zu verursachen, denken Sie an ArrayList. :) –

Antwort

2

Riecht wie Hausaufgaben.

String[] array = ... 

ArrayList<String> gList = new ArrayList<String>(); 

ArrayList<String> oList = new ArrayList<String>(); 

for (String word : array) { 
    if (word != null)) { 
     if (word.startsWith("g:")) 
      gList.add(word.subString(2)); 
     else if (word.startsWith("o:") 
      oList.add(word.subString(2)); 
    } 
} 
+0

Das sind keine Hausaufgaben, aber danke dafür. Nicht genau was ich wollte, aber ich habe es für meinen Gebrauch modifiziert. – Ugleh

1

Ein Weg besteht darin, die neuen Listen mit ArrayList s zu erstellen. Wenn Sie primitive Arrays benötigen, nachdem Sie die zwei neuen Listen haben, verwenden Sie einfach toArray() auf ihnen.

0

Sie würden besser mit ArrayLists (als Arrays) arbeiten, weil Sie nicht im Voraus wissen, welche Größe das Ergebnis sein wird. Sie können jedoch zwei Durchgänge durchführen, einen zum Zählen der Zeilen mit dem Präfix von Interesse und einen zweiten zum Auffüllen des neuen Arrays.

int n = 0; 
for (int i = 0; i < array.size; i++) 
    if (array[i].startsWith(prefix)) 
    n++; 

String[] result = new String[n]; 
int j = 0; 

for (int i = 0; i < array.size; i++) 
    if (array[i].startsWith(prefix)) 
    result[j++] = array[i].substring(prefix.length()); 

Unversucht, aber ich denke, das sollte den Job machen.

+1

Haben Sie etwas Persönliches gegen Zahnspangen? : P –

+1

Sicher. Sie sind "Codejunk". Unnötige Klammern beeinträchtigen die Lesbarkeit. imnsho. http://www.slideshare.net/carlmanaster/codejunk-ignitesd –

0

Unter der Annahme, dass Sie das ursprüngliche Array vermasseln, und dass Sie nicht brauchen, um den Auftrag zu erhalten, sollte dies recht schnell sein:

String[] array = {"o:1","o:2","g:10","o:3","g:20","o:4","g:30","g:40","o:5"}; 
int low = 0; 
int high = array.length - 1; 
while(low <= high) { 
    if(array[low].startsWith("g:")) { 
     array[low] = array[low].substring(2); 
     low ++; 
    } else if (array[high].startsWith("o:")) { 
     array[high] = array[high].substring(2); 
     high --; 
    } else { 
     String temp = array[low].substring(2); 
     array[low] = array[high].substring(2); 
     array[high] = temp; 
     low++; 
     high--; 
    } 
} 
String[] gs = new String[low]; 
System.arraycopy(array, 0, gs, 0, low); 
String[] os = new String[array.length - low]; 
System.arraycopy(array, low, os, 0, array.length - low); 
Verwandte Themen