replaceAll bei sehr großen String

keksen

Mitglied
Hi,

ich hab folgendes Problem. Ich speicher mir den Inhalt einer Datei in einen String. Dabei ist die Datei mehrere MB groß. Nun möchte ich verschiedene Zeichen in diesem String ersetzen wie zb.: newlines, tabs oder Sonderzeichen.
Mit den Sonderzeichen und den tabs funktioniert es auch einwandfrei, aber wenn ich mit der Funktion replaceAll die newlines ersetzten will, bekomme ich folgende Fehlermeldung:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2882)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:100)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:390)
at java.lang.StringBuffer.append(StringBuffer.java:224)
at java.util.regex.Matcher.appendReplacement(Matcher.java:748)
at java.util.regex.Matcher.replaceAll(Matcher.java:813)
at java.lang.String.replaceAll(String.java:2189)
at FileTester.main(FileTester.java:45)

Die Funktion rufe ich wie folgt auf:

Java:
summary = summary.replaceAll("\n", " ");

Bei kleineren Strings funktioniert es aber. Gibt es eine andere Möglichkeit alle newlines zu ersetzten, oder soll ich mir den String ich kleinere String zerlegen und auf diese dann die Funktion anwenden.
 

Marco13

Top Contributor
Wie man am Stacktrace sieht, verwendet replaceAll intern Regular Expressions. Die sind zwar praktisch, können aber schrecklich ineffizient sein (sowohl bezüglich performance als auch bezüglich Speicherverbrauch). Eine brute-force-Lösung könnte sowas wie
Code:
StringBuilder sb = new StringBuilder();
for (int i=0; i<input.length(); i++)
{
    char c = input.charAt(i);
    if (c == '\n') sb.append(' ');
    else sb.append(c);
}
könnte das Speicherproblem lösen. Vielleicht (!) wäre es effzienter, mit string.indexOf('\n') die Stellen zu suchen, und die übrigen Stellen "blockweise" anzuhängen, aber es kann auch sein, dass das keinen großen Unterschied macht...
 
B

bygones

Gast
wie liest du die Datei ein ?
da du dort ja auch denk ich mal "blockweise" liest kannst du ja schon auf den Blöcken dein replace machen ?!
 

keksen

Mitglied
Ich benutzte Tika zum einlesen der Dateien. Damit ist es mir möglich verschiedene Dateiformate einzulesen. Von Tika bekomme ich dann den Inhalt der Datei, daher ist es nicht möglich beim einlesen den String schon zu bearbeiten.

Java:
FileSystemManager mgr = VFS.getManager();
String url = "/home/gast/Dokumente/Lucene/Search/groß/text.txt";
FileObject file = mgr.resolveFile(url);
input = file.getContent().getInputStream();

ContentHandler textHandler = new BodyContentHandler(-1);
Metadata metadata = new Metadata();
AutoDetectParser parser = new AutoDetectParser();
parser.parse(input, textHandler, metadata, new ParseContext());

String summary = textHandler.toString();
summary = summary.replaceAll("\n", " ");

Der Ansatz von Marco13 scheint schonmal zu funktionieren. Danke.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Tommy Nightmare String.replaceAll(...) fehlerhaft? Allgemeine Java-Themen 3
N Methoden "a.b".replaceAll(".", "$") Allgemeine Java-Themen 8
N String.replaceAll Problem Allgemeine Java-Themen 5
J replaceAll , "[", "]" & regex Allgemeine Java-Themen 12
Airwolf89 ReplaceAll, kann xml- Tag nicht aus String ausschneiden Allgemeine Java-Themen 3
A Probleme mit replaceAll Allgemeine Java-Themen 3
D replaceAll => no such java.lang.NoSuchMethodError Allgemeine Java-Themen 5
Daniel_L RegEx und replaceAll - Probleme mit escapen des Suchbegriffs Allgemeine Java-Themen 4
D Regex-Problem mit replaceAll Allgemeine Java-Themen 5
G String.replaceall - mehrere Zeichen durch eines ersetzen Allgemeine Java-Themen 5
S Geschwindigkeitsproblem bei String.replaceAll Allgemeine Java-Themen 2
Daniel_L Frage zu replaceAll und regulären Ausdrücken Allgemeine Java-Themen 15
T String.replaceAll - warum PatternSyntaxException? Allgemeine Java-Themen 4
F [ und mit replaceAll() ersetzen Allgemeine Java-Themen 2
G replaceAll() Allgemeine Java-Themen 4
@ String replaceAll(" ", ""); Allgemeine Java-Themen 2
T ReplaceAll (außer) Allgemeine Java-Themen 11
karambara ReplaceAll und Backslashes Allgemeine Java-Themen 3
P replaceAll und "\" durch "/" ersetzen Allgemeine Java-Themen 15
P ReplaceAll ersetzt nicht bzw. möchte verketteten string Allgemeine Java-Themen 4
G replaceAll Allgemeine Java-Themen 2
R String.replaceAll $lt; ersetzen Allgemeine Java-Themen 3
G ReplaceAll problem Allgemeine Java-Themen 7
P Alternative zu replaceAll (jdk < 1.4) Allgemeine Java-Themen 14
B Sehr großen Graph mit Verbindungen bauen und minimieren? Allgemeine Java-Themen 35
javamax2000 Sehr sonderbares Verhalten Allgemeine Java-Themen 6
B Welcher Datentyp für sehr große Zahlenbereiche? Allgemeine Java-Themen 1
P Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 5
R JDK installieren OpenJDK-Aufruf sehr langsam Allgemeine Java-Themen 4
Thallius String erzeugen sehr langsam Allgemeine Java-Themen 16
D Verwaltung von sehr vielen Objekten Allgemeine Java-Themen 12
S JNLP startet seit 1.8.0_31 sehr langsam + Windows-Systemverzeichnis Allgemeine Java-Themen 3
Creylon Java verursacht sehr starkes ruckeln Allgemeine Java-Themen 5
N Bin to Dez und umgekehrt mit sehr großen Zahlen Allgemeine Java-Themen 2
T Gleiche Operation dauert teilweise sehr lange Allgemeine Java-Themen 12
M Externe Jar sehr langsam Allgemeine Java-Themen 23
M JUnit & Multithreading - sehr seltener Fehler Allgemeine Java-Themen 3
H Sehr viele Threads effizient Verwalten Allgemeine Java-Themen 13
J Laden von JAR Files geht ohne ADMIN Rechte sehr langsam Allgemeine Java-Themen 6
H Kopieren sehr langsam Allgemeine Java-Themen 5
B Cipher.getInstance Aufruf sehr langsam Allgemeine Java-Themen 2
nrg Arbeiten mit sehr großen CSV Dateien Allgemeine Java-Themen 20
B Eingabemaske Komponenten aktivieren, funktionert nicht (sehr kurios) Allgemeine Java-Themen 2
hdi Heap Sapce Error bei sehr großem String Allgemeine Java-Themen 5
G RXTX library braucht sehr lange zum laden. Ist das normal? Allgemeine Java-Themen 8
L Java 1.5 - Anwendung unter 1.6 JRE sehr langsam geworden Allgemeine Java-Themen 8
O Speicherverbrauch von Java / VM sehr hoch? Allgemeine Java-Themen 27
M Rechnen mit sehr kleinen Zahlen Allgemeine Java-Themen 8
G Lesen von sehr großen dateien Allgemeine Java-Themen 8
M String zusammensetzen->sehr langsam Allgemeine Java-Themen 3
G Sehr sehr merkwürdige Ereignisse mit Fibonacci Programm Allgemeine Java-Themen 6
G Sehr gutes Java-Framework(Gui-Builder) auf XML-Basis gesucht Allgemeine Java-Themen 21
E String.replace für (sehr) großen Text Allgemeine Java-Themen 9
T [SVNKit] Commit sehr langsam. Allgemeine Java-Themen 7
G Arraylist statt List - Sehr schlimm? Allgemeine Java-Themen 8
F JAVA Applikationen starten sehr langsam Allgemeine Java-Themen 14
D Datei öffnung sehr langsam Allgemeine Java-Themen 17
G Neue Warenwirtschaft aber sehr langsam! Allgemeine Java-Themen 3
H Entpacken sehr langsam Allgemeine Java-Themen 10
Bleiglanz Benchmarks sind sehr schwierig Allgemeine Java-Themen 2
T Modulo-Operator versagt bei zu großen Zahlen? Allgemeine Java-Themen 14
H Gibt es einen großen Unterschied zwischen Java 6 und Java 7? Allgemeine Java-Themen 3
R Panel mit 8 gleich großen "fenstern" Allgemeine Java-Themen 11
M Eclipse Stackoverflow beim Einlesen von großen Bilder in kd Baum Allgemeine Java-Themen 15
S Schnelles arbeiten mit großen CSV Dateien Allgemeine Java-Themen 4
H2SO3- großen double in string mit e umwandeln Allgemeine Java-Themen 4
kb22 CMS mit großen Dateien (heap problem) Allgemeine Java-Themen 3
H2SO3- speichern von Daten in seeeeeehr großen Tabellen (nicht DB) Allgemeine Java-Themen 8
G Bringt es etwas System.gc() nach großen Aufgaben aufzurufen? Allgemeine Java-Themen 2
T Suche den großen Calendar Thread ! Allgemeine Java-Themen 2
U Kompilieren einer großen Datei if-else = StackOverflowError Allgemeine Java-Themen 4
S Datenbank Abfragen mit großen Datenmengen Allgemeine Java-Themen 22
M String#equals(), Probleme mit großen Strings? Allgemeine Java-Themen 4
F Mehrere Bilder zu einem Großen zusammenkleben Allgemeine Java-Themen 3
R Was nehmen für Flußdiagramme und Druck von großen Grafiken Allgemeine Java-Themen 4
W JTextArea beschleunigen bei großen Texten Allgemeine Java-Themen 4
flashfactor Problem mit mehren großen Dateien Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben