Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich habe eine Klasse geschrieben, in der eine Menge an String - Konstanten vorhanden sind. Ein Teil dieser Zeichenketten ist ein Art Linearkombination anderer Zeichenketten. Ein Teil der Ausdrücke wird bei allen anderen Ausdrücken benötigt und deshalb separat als String Baustein abgelegt. Der andere Teil legt die Struktur der übergebenden Zeichenketten fest - z.B. bei einem Kreis gibt es nur zwei Möglichkeiten bei der Strichstärke (LATEX - Pictureumgebung). Die Einschränkungen bei der Struktur sind gewollt.
Die Zeichenkette(n) s wird bei der Auswertung von regulären Ausdrücken verwendet- Pattern pat = Pattern.compile(s);
Meine Fragen: was könnte ich tun, damit die Zuweisung schneller geht? Könnte es irgendwelche Speicherprobleme wegen diesen Zeichenketten geben.
Das folgende Codeseqment ist repräsentativ für die gesamten Klasse.
Code:
public class Zahlen
{
public final static String muster_zahlen_gleitkomma=
Zerlegen1.Hilfssymbole.space_vorzeichen+
"[-]?" +Zerlegen1.Hilfssymbole.space +
"[0-9.]+" +Zerlegen1.Hilfssymbole.space;
public class geschw
{
public final static String muster_zahlen_gleitkomma="\\{" + Zahlen.muster_zahlen_gleitkomma+ "\\}"; }
}
Der "+" Operator bei Strings erzeugt temporäre Stringbuffer. Bei komplexeren Operationen oder wenn es auf Geschwindigkeit ankommt, sollte man lieber selber einen Stringbuffer erzeugen, damit die ganzen Konkatenationen machen und ganz am Schluß wieder auf String konvertieren.
Ob das in Deinem Fall hilft, hängt davon ab, wie oft Du diese Klasse erzeugst. "Final" bedeutet ja, daß diese Operationen nur einmal durchlaufen werden und da sollte das "+" ja ok sein (auf die Klasse bezogen). Werden allerdings dauernd Instanzen dieser Klasse erzeugt und zerstört, solltest Du auf Stringbuffer zurückgreifen.
90% aller Zeichenketten sollen static sein und nur ein einziges Mal erzeugt werden.
Zuerst fasse ich die Zeichenketten zusammen, um zu prüfen, ob die übergebene Zeichenkette den Anforderungen genügt - d.h. es sollen nicht alle Möglichkeiten der Latex - picture - Umgebung möglich sein, sondern nur eine kleine Teilmenge. Zur erst werden die saveboxen und picture-Umgebungen als logische Einheit aus der übergebenen Zeichenkette extrahiert und danach wird der Inhalt ausgewertet
der + Operator ist bei static finals völlig belanglos und wird normalerweise schon vom javac aufgelöst, aber das könnte bei dir scheitern (wozu der komplexe Zusammenbau mit anderen Teilen???)
ich würde eher
static final Pattern p = Pattern.compile("jetzt"+
"kommt"+
"ein"+
"ganz"+"langer"+"string");
machen (wenn das Muster wirklich schon zur Compile-Zeit feststeht).