Stringarray splitten an unbekanntem Zeichen

Status
Nicht offen für weitere Antworten.
S

scooterJava

Gast
Eine Frendroutine liest bei mir den verschlüsselten Inhalt einer Datei ein, in dem zeilenweise Schlüssel/Wert-Paare abgelegt sind und gibt mir den eingelesenen Stream als String zurück.

Code:
String config=Cryption.readTextFile("datei.cfg");

Unverschlüsselt würde die Datei diesen Inhalt haben:

Code:
key1=wert1
key2=wert2
(usw.)

Ich kann jetzt nur auf diesen String "config" zugreifen. Mit split() habe ich versucht, die Angaben in ein String-Array zu bringen:

Code:
String[] array=config.split("=");

So erhalte ich aber nur folgende Indexinhalte:

Code:
[0] = key1
[1] = wert1
        key2
[2] = wert2
        key3

Gedacht war aber:

Code:
[0] = key1
[1] = wert1
[2] = key2
[3] = wert2
(usw.)

Also habe ich angenommen, dass hier noch ein CR (\r) oder LF (\n) drinsteckt und habe das mit ins Pattern gebracht:

Code:
String[] array=config.split("=\r"); // oder wahlweise "=\n"

Der Erfolg: Jetzt steht alles in array[0], ohne Aufsplittung.

Was mache ich falsch?
 

Wildcard

Top Contributor
Das ist doch irgendwie dämlich. Warum liest du eine Properties Datei nicht mit Properties ein?
 

Ebenius

Top Contributor
Es gibt mehrere Möglichkeiten. Wenn sich der Inhalt der Datei an die Konventionen von java.util.Properties.load(Reader) hält, dann sieht der Code einfach so aus (try-catch hab ich weggelassen):
Code:
final Properties properties = new Properties();
properties.load(new StringReader(config));

Anderenfalls ist String.split natürlich eine Option. Allerdings ist dein regulärer Ausdruck kaputt. Du willst eigentlich das da machen:
Code:
config.split("[=\\n]");
Das funktioniert jedoch nur, wenn keine Leerzeilen im Text enthalten sind und ausgeschlossen ist, dass der Wert '=' enthält.

Anderenfalls lies es doch zeilenweise ein, in etwa so (wieder try-catch weggelassen):
Code:
final BufferedReader configReader =
          new BufferedReader(new StringReader(config));
String line;
while((line = configReader.readLine()) != null) {
  final String[] keyValuePair = line.split("=", 2);
  // ...
}
configReader.close();

Hoffe das hilft, Ebenius
 
S

scooterJava

Gast
Danke für die Antworten. Wie ich eine Properties-Datei einlesen muss, weiß ich. Hier geht es aber um eine *verschlüsselte* Datei, die zufällig den Aufbau einer Properties-Datei hat, wenn sie entschlüsselt wird. Ein direkter Zugriff würde gar nicht funktionieren.

Die Fremdroutine kann ich nicht ändern. Sie liefert mir einen String, den ich weiterbearbeiten kann. Das Problem ist, das bei der Ausgabe z. B. über eine MessageBox es den Anschein hat, hier wäre nach z. B. wert1 ein Zeilenumbruch, da ein solcher in der Box/Console erfolgt. Irgendein nicht sichtbares Zeichen steht also nach wert1, wert2 usw. Wüsste ich, welches, könnte ich es über ein Pattern als Separator einbeziehen und hätte mein gewünschtes Ergebnis.

Ich werde aber mal das korrigierte Pattern von Ebenius versuchen.
 

Wildcard

Top Contributor
Ist doch irrsinn das dir die Verschlüsselung einen String liefert. Ist das deine Klasse/Methode? Lass sie transparent mit einem Stream arbeiten, dann kannst du auch Properties verwenden.
 

Ebenius

Top Contributor
Scooterjava,

Hier geht es aber um eine *verschlüsselte* Datei, die zufällig den Aufbau einer Properties-Datei hat, wenn sie entschlüsselt wird. Ein direkter Zugriff würde gar nicht funktionieren.

Dann lies doch mal mein erstes Code-Beispiel oben. Da wird in die Properties-Instanz aus dem entschlüsselten String gelesen!

Code:
final Properties properties = new Properties(); 
properties.load(new StringReader(config));

Na?
Ebenius
 
G

Guest

Gast
Danke auch, aber das Split-Pattern reichte mir schon. Deinen Kniff werde ich mal an anderer Stelle ausprobieren.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N for (String s : StringArray) : Kopie oder Verweis? Allgemeine Java-Themen 9
M Datenbankinhalt an StringArray übergeben Allgemeine Java-Themen 8
U Stringarray in Integerarray wandeln Allgemeine Java-Themen 2
L String splitten und multiplizeren Allgemeine Java-Themen 10
G String mit umbekannter länge splitten. Allgemeine Java-Themen 2
V Eingegeben String Splitten und in Integer umwandeln Allgemeine Java-Themen 2
A Vector Strings in Array splitten Allgemeine Java-Themen 6
OnDemand String splitten (mit Anfang und Ende) Allgemeine Java-Themen 11
N String zweifach splitten Allgemeine Java-Themen 4
D Strings chemisch splitten Allgemeine Java-Themen 3
I Best Practice Properties auslesen und splitten (RegExp?) Allgemeine Java-Themen 0
A ALTER TABLE mit Hilfe von RegEx zerlegen, splitten Allgemeine Java-Themen 5
R Jar-Datei splitten Allgemeine Java-Themen 2
E String splitten Allgemeine Java-Themen 15
E String splitten Allgemeine Java-Themen 7
B AudioInputStream, bzw. Sound bearbeiten / splitten Allgemeine Java-Themen 2
M byte array splitten Allgemeine Java-Themen 3
H String "Splitten" Allgemeine Java-Themen 2
N Strings mit null wiedergabe Splitten Allgemeine Java-Themen 4
M Filepath splitten Allgemeine Java-Themen 4
A String splitten Allgemeine Java-Themen 4
A PDFs splitten mergen und Seitenzhalen hinzufügen Allgemeine Java-Themen 5
MQue Pfad splitten Allgemeine Java-Themen 2
S String splitten. Allgemeine Java-Themen 7
P String splitten - wie? Allgemeine Java-Themen 4
E Nochmal komplexen String matchen und splitten Allgemeine Java-Themen 2
R Pdf Datei splitten Allgemeine Java-Themen 4
E String mit ; splitten und zuweisen? Allgemeine Java-Themen 20
thE_29 Nach regex splitten Allgemeine Java-Themen 19
M nach einem Pattern splitten Allgemeine Java-Themen 2
S Integer-splitten für Abfrage. Allgemeine Java-Themen 4
S liste splitten Allgemeine Java-Themen 8
C String splitten Allgemeine Java-Themen 3
T String splitten Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben