ich verzweifele hier gerade daran, eine Matrix aus einem Textfile auszulesen. Das einlesen und übersetzen in einen inputstream ist mir bereits gelungen, allerdings komme ich jetzt nicht damit weiter, die einzelnen elemente in ein array zu speichern. zunächst muss ich das array bereitstellen, die zahl der zeilen habe ich ja schon, mit der anzahl der token würde ich dann ja auch auf die anzahl der spalten kommen, aber diese counttokens() methode scheint es ja nur beim stringTokenizer zu geben... hier erstmal mein Quellcode:
Java:
importjava.io.*;importjava.util.ArrayList;importjava.util.List;importjava.util.StringTokenizer;publicclassMatrix{privatedouble[][] arr;publicstaticMatrix(String filename){try{List<String> matRows =newArrayList<String>();BufferedReader myText =newBufferedReader(newFileReader(filename));String line;while((line = myText.readLine())!=null){
matRows.add(line);}int numOfRows = matRows.size();// saves the number of rowsString stringMat = matRows.toString();/*
* convert stringMat from String to InputStream:
*/byte[] bytes = stringMat.getBytes();InputStream is =newByteArrayInputStream(bytes);StreamTokenizer tokenizer =newStreamTokenizer(is);/*
*her komme ich nicht weiter
*/}catch(Exception e){// Catch a possible exceptionSystem.err.println("Error: "+ e.getMessage());}}
wie kann ich nun weitermachen? wie komme ich an die zahl der token und wie kann ich sowohl kommata als auch freizeichen als trennung definieren? ein weiteres problem sind die klammern, die durch den weg über die Liste am anfang und am ende stehen. wie kann ich das lösen?
mein problem hat sich nun etwas verlagert , das mit dem einlesen hat jetzt alles geklappt, nun stehe ich aber vor dem algorithmischen problem, den vektor, den ich beim einlesen gewonnen habe, wieder in eine matrix zu überführen. mein ansatz funktioniert irgendwie nicht, wobei ich nicht erkenne wo da das problem ist,vielleicht kann mir ja hierbei jemand helfen?!
Java:
publicstaticvoidreadMat(String filename){try{int numOfCol =0;List<String> list =newArrayList<String>();BufferedReader myText =newBufferedReader(newFileReader(filename));String line;while((line = myText.readLine())!=null){StringTokenizer st =newStringTokenizer(line);
numOfCol = st.countTokens();while(st.hasMoreTokens()){
list.add(st.nextToken());}}int numOfRow = list.size()/ numOfCol;String[][] arr =newString[numOfRow][numOfCol];for(int i=0; i<numOfRow; i++){for(int j=0;j<list.size(); j++){
arr[i][j % numOfCol]= list.get(j);}}for(int k =0; k < numOfRow;++k){for(int l =0; l < numOfCol;++l){System.out.print(arr[k][l]+"\t");}System.out.println("");}}catch(Exception e){// Catch a possible exceptionSystem.err.println("Error: "+ e.getMessage());}}