Vulpecula
Commander
- Registriert
- Nov. 2007
- Beiträge
- 2.241
Moin moin!
Ich beschäftige mich momentan damit, Daten aus einer ASCII-Datei zu parsen. Ein Bestandteil dessen ist, dass ich prüfen möchte, ob bestimmte "Blöcke" geschlossen sind. Sieht in der Datei ungefähr so aus:
Die Datei wird zunächst mittels Scanner eingelesen und jedes "Wort" in einer ArrayList abgelegt, die dann an den Parser übergeben wird. Als "Werkzeug" möchte ich einen Stack benutzen, um zu kontrollieren, ob alle "Blöcke" richtig geschlossen sind. Hier mal der Code:
Es funktioniert soweit, nur frage ich mich, ob man das Ganze auch etwas eleganter - ohne Switch...Case - umsetzen könnte. Das einzige, was mir auf Anhieb einfällt, wäre ein riesen haufen If-Statements...
Vielleicht hat ja jemand ein paar Hinweise für mich.
MfG - Vulpecula
Ich beschäftige mich momentan damit, Daten aus einer ASCII-Datei zu parsen. Ein Bestandteil dessen ist, dass ich prüfen möchte, ob bestimmte "Blöcke" geschlossen sind. Sieht in der Datei ungefähr so aus:
Code:
objektStart
aussenStart
innenStart
Daten A1 A2 A3
Daten B1 B2 B3
Daten C1 C2 C3
innenEnde
aussenEnde
aussenStart
innenStart
Daten A1 A2 A3
Daten B1 B2 B3
Daten C1 C2 C3
innenEnde
aussenEnde
...usw...
objektEnde
Die Datei wird zunächst mittels Scanner eingelesen und jedes "Wort" in einer ArrayList abgelegt, die dann an den Parser übergeben wird. Als "Werkzeug" möchte ich einen Stack benutzen, um zu kontrollieren, ob alle "Blöcke" richtig geschlossen sind. Hier mal der Code:
Code:
private static boolean areAllBlocksClosed(String part[])
{
List<String> stack = new ArrayList<>();
String parts[];
for (int i = 0; i < part.length; i++)
{
parts = part[i].trim().split(" ");
switch (parts[0].toLowerCase())
{
case "objektStart":
stack.add("objektStart");
break;
case "aussenStart":
stack.add("aussenStart");
break;
case "innenStart":
stack.add("innenStart");
break;
case "Daten":
if (!stack.get(stack.size() - 1).equals("innenStart"))
{
return false;
}
break;
case "innenEnde":
if (!stack.get(stack.size() - 1).equals("innenStart"))
{
return false;
}
else
{
stack.remove(stack.size() - 1);
}
break;
case "aussenEnde":
if (!stack.get(stack.size() - 1).equals("aussenStart"))
{
return false;
}
else
{
stack.remove(stack.size() - 1);
}
break;
case "objektEnde":;
if (!stack.get(stack.size() - 1).equals("objektStart"))
{
return false;
} else
{
stack.remove(stack.size() - 1);
}
break;
default:
return false;
}
}
return stack.isEmpty();
}
Es funktioniert soweit, nur frage ich mich, ob man das Ganze auch etwas eleganter - ohne Switch...Case - umsetzen könnte. Das einzige, was mir auf Anhieb einfällt, wäre ein riesen haufen If-Statements...
Vielleicht hat ja jemand ein paar Hinweise für mich.
MfG - Vulpecula