Ich muss einen String in Java trimmen, so dass:
Der schnelle braune Fuchs springt über den faulen Hund.
wird
Die schnelle braune ...
Im Beispiel oben trimm ich auf 12 Zeichen. Wenn ich nur Teilzeichenfolge verwende, würde ich erhalten:
Der schnelle Br ...
Ich habe bereits eine Methode, um dies mit Substring zu tun, aber ich wollte wissen, was der schnellste (effizienteste) Weg ist, dies zu tun, weil eine Seite viele Trim-Operationen haben kann.
Der einzige Weg, an den ich denken kann, ist, die Zeichenfolge in Leerzeichen aufzuteilen und sie wieder zusammenzusetzen, bis ihre Länge die angegebene Länge überschreitet. Gibt es eine andere Art und Weise? Vielleicht eine effizientere Methode, mit der ich die gleiche Methode verwenden kann, um eine "weiche" Trimmung vorzunehmen, wobei ich das letzte Wort (wie im obigen Beispiel gezeigt) und eine harte Trimmung, die ein Teilstring ist, beibehalten.
Danke,
Unten ist eine Methode, mit der ich lange Strings in meinen Webapps trimmen kann.
Das "weiche" boolean
, wie du es ausdrückst, wenn es auf true
gesetzt wird, behält das letzte Wort bei.
Dies ist die prägnanteste Art, dies zu tun, die ich verwenden könnte, die einen StringBuffer verwendet, der viel effizienter ist als die Wiederherstellung einer unveränderlichen Zeichenkette.
Aktualisieren
Ich habe den Code so geändert, dass der ...
im StringBuffer angehängt wird, um unnötige Kreationen von String
implizit zu verhindern, was langsam und verschwenderisch ist.
Hinweis: escapeHtml
ist ein statischer Import aus Apache commons:
import static org.apache.commons.lang.StringEscapeUtils.escapeHtml;
Sie können es entfernen und der Code sollte gleich funktionieren.
Hier ist eine einfache, regexbasierte 1-Linien-Lösung:
%Vor%Erläuterung:
(?<=.{12})
ist ein negativer Look hinter , der angibt, dass sich mindestens 12 Zeichen links von der Übereinstimmung befinden, aber es handelt sich um eine nicht erfassende (dh nullbreite) Übereinstimmung \b.*
entspricht der ersten Wortgrenze (nach mindestens 12 Zeichen - oben) bis zum Ende Dies wird durch "..."
ersetztHier ist ein Test:
%Vor%Ausgabe:
%Vor%Ihre Anforderungen sind nicht klar. Wenn Sie Schwierigkeiten haben, sie in einer natürlichen Sprache zu artikulieren, ist es nicht überraschend, dass sie schwer in eine Computersprache wie Java zu übersetzen sind.
"Bewahre das letzte Wort" impliziert, dass der Algorithmus weiß, was ein "Wort" ist, also musst du es zuerst sagen. Die Trennung ist eine Möglichkeit, dies zu tun. Ein Scanner / Parser mit einer Grammatik ist ein anderer.
Ich würde mir Sorgen machen, dass es funktioniert, bevor ich mich um Effizienz kümmere. Lass es funktionieren, messe es und sieh dann, was du mit Leistung machen kannst. Alles andere ist Spekulation ohne Daten.
Ich benutze diesen Hack: Angenommen, der getrimmte String muss eine Länge von 120 haben:
%Vor%