Best Practice LaTeX aus Textdateien einlesen und bearbeiten

EEx

Mitglied
Hallo Leute

Wieder ein kleines Problem frisch von der Werkbank. Ich möchte

- Textdateien bearbeiten, die LaTeX-Code enthalten
- innerhalb des LaTeX-Codes Textersetzung durchführen

Das Problem ist: Das geht alles andere als gut.

Frage 1:
Wo liegt hier das Problem?

Java:
String stringer = "$$ f(x) = x^PPaPP \\ \\ \\ f'(x) = $$ §{edit}";
stringer.replaceAll("PPaPP", "5");
System.out.println(stringer);

Frage 2:
Wie löst man es am besten? Ich möchte meinen Kunden ein einfaches YAML-basiertes Dokument zur Verfügung stellen, in denen sie mathematische Formeln per LaTeX spezifizieren, aber auch Platz für zufällige Parameter lassen können (die wiederum später spezifiziert werden). Jetzt sollen die Platzhalter für die Parameter (hier: PPaPP für Parameter a) innerhalb des LaTeX-Codes ersetzt werden.

Welche Codierung für Parameter bietet sich denn an?
Ich habe schon an der einfachen Codierung #a gearbeitet, die ging ebenfalls nicht.
 
Hallo,

ich würde Dir raten, die Dokumentation zu Funktionen zu lesen, wenn Du Dir mit deren Benutzung noch unsicher bist oder - so wie hier - ein Problem mit diesen hast.

https://docs.oracle.com/javase/7/do...eplaceAll(java.lang.String, java.lang.String)

Es wird der veränderte String zurück gegeben und nicht der übergebene String angepasst.

Der eigentliche Grund dahinter ist, dass Strings unveränderbar sind. Das hat zur Folge, dass viele Optimierungen möglich sind.

Code:
String a1 = "aaaa";
String a2 = "aaaa";
if (a1 == a2) {
  System.out.println("Referenz gleich!");
}
Den Code könntest Du mal ausprobieren und Du wirst sehen, dass die Referenz gleich ist. Hier wird viel optimiert. Das ist auch der Grund für den StringBuilder - wenn Du etwas hast wie:
Code:
String test = "a" + "b" + "c" + "d" + "e";
dann erhälst Du im Speicher erst einmal neben den einzelnen Strings die Strings "ab", "abc", "abcd" und "abcde". Also bei einer Applikation, die große Strings so viel verarbeitet wird der Garbage Collector viel Arbeit haben....

Diesbezüglich habe ich jetzt nicht ganz so viele gute Links gefunden. Ich kenne es in erster Linie von .Net wo es ebenso ist. Aber http://www.javaschubla.de/2007/javaerst0240.html hat mich bestärkt, dass es in Java doch auch genau so sein müsste.

Konrad
 
Hallo Konrad,

vielen Dank für die ausführliche Information. Tatsächlich lagen alle aktuellen Schwierigkeiten an der falschen Nutzung von "==" und "replaceAll" bei Strings. Es gab auch noch ein Problem mit der Codierung, aber das ließ sich auf Ebene der Programmierumgebung lösen.

Damit bin ich erstmal bestens informiert, und werde mich jetzt nochmal verstärkt den Grundlagen zuwenden. Das Stichwort "String ist immutable" ist ein sehr guter Impuls.

Danke!
 
Da ich eben auch noch einmal meine Antwort gelesen habe - den Code habe ich noch etwas erweitert, damit deutlich wird, dass mit == wirklich nur die Referenz verglichen wird. Habe zwar eigentlich nichts anderes gesagt, aber beim erneuten lesen meinte ich, dass es zu undeutlich sein könnte.

Code:
String a1 = "aaaa";
String a2 = "aaaa";
String a3 = new String(a1);
if (a1 == a2) { // Vergleich der Referenzen
    System.out.println("Referenz gleich!");
}
if (a1 != a3) { // Vergleich der Referenzen
    System.out.println("Referenz nicht gleich!");
}
if (a1.equals(a3)) { // Vergleich des Inhalts
    System.out.println("Inhalt der Strings gleich!");
}
 

Zurück
Oben