Ich möchte eine CSV-Datei für eine Reihe von Elementen lesen, die entweder metallisch oder nichtmetallisch sein können und jede Zeile in der CSV-Datei haben kann mehrere Elemente. Wenn es mehrere Elemente hat, haben alle Zeilen der Datei diese Anzahl an Elementen. Eine gültige Linie wird wie folgt aussehen:Wie liest und verarbeitet man eine Zeile, die mehrere Objekte in einer Zeile haben kann JAVA
<symbol,name,atomNum,mass,other/><symbol,name,atomNum,mass,other/>
, wo andere ein Zeichen, wenn sein ein Nichtmetall und Doppel wenn ihr ein Metall. Dies ist, was ich bisher getan und bin nicht sicher, wie in mehreren Elementobjekten auf der Linie lesen
public static void readValues(String fileName)
{
if (!constructed)
{
FileInputStream fileStrm = null;
InputStreamReader rdr;
BufferedReader bufRdr;
String line;
int lineNum;
try
{
fileStrm = new FileInputStream(fileName);
rdr = new InputStreamReader(fileStrm);
bufRdr = new BufferedReader(rdr);
lineNum = 0;
line = bufRdr.readLine();
while(line != null)
{
lineNum++;
elements[lineNum - 1] = processElements(line);
line = bufRdr.readLine();
System.out.println(elements);
}
fileStrm.close();
}
catch(IOException e)
{
if(fileStrm != null)
{
try
{
fileStrm.close();
constructed = true;
}
catch (IOException ex2)
{
}
}
System.out.print("error in file processing: " + e.getMessage());
}
}
}
private static Element processElements(String line)
{
char chr;
Element element;
String[] lineArray = line.split(",");
if(lineArray[4] == chr)
{
element = new NonMetal();
elements.setState(lineArray[4]);
}
else
{
element = new Metal();
element.setConduct(Double.parseDouble(lineArray[4]));
}
element.setSymbol(lineArray[0]);
element.setName(lineArray[1]);
element.setAtomNum(Integer.parseInt(lineArray[2]));
element.setMass(Double.parseDouble(lineArray[3]));
return elements;
}
Ich habe eine Super-Elementklasse und zwei Unterklassen, Metall und Nichtmetall, die jeweils die Standardmethoden für eine enthalten Klasse
Vielen Dank für Ihre Antwort. Diese Methode scheint den Job zu machen, ich muss mich nur mit Regex vertraut machen. Ein Problem ist jedoch, dass es auf einer Linie möglich ist, n Elemente zu haben, was bedeutet, dass es 3,4,8,9 Elemente auf einer einzigen Linie haben könnte. Wie kann ich das erklären? Ich denke, Sie müssen die Anzahl der "<" Zeichen zählen, die den Start eines Elements initiieren und diese Anzahl verwenden, um eine angemessene Anzahl von Elementen zu erstellen – killerstick1