Kürzen Sie die Zeichenfolge in Julia

8

Gibt es eine praktische Funktion, um Strings auf eine bestimmte Länge abzuschneiden?

Es würde zu etwas wie diesem

äquivalent sein %Vor%     
tlnagy 15.09.2016, 01:23
quelle

5 Antworten

7

In der naiven ASCII-Welt:

%Vor%

würde tun. Wenn es vorzuziehen ist, Speicher mit der ursprünglichen Zeichenfolge zu teilen und das Kopieren von SubString zu vermeiden, kann Folgendes verwendet werden:

%Vor%

Aber in einer Unicode-Welt (und es ist eine Unicode-Welt) ist das besser:

%Vor%

Schließlich erinnerte @ IsmaelVenegasCastelló uns an die Komplexität der Grapheme (arrrgh), und dann ist das, was benötigt wird:

%Vor%

Diese letzten beiden Implementierungen versuchen, die Berechnung von length (die langsam sein kann) oder das Zuweisen / Kopieren oder sogar das looping von n -Zeiten, wenn length kürzer ist, zu vermeiden.

Diese Antwort basiert auf Beiträgen von @MichaelOhlrogge, @FengyangWang, @Oxinabox und @ IsmaelVenegasCastelló

    
Dan Getz 15.09.2016, 08:18
quelle
4

Ich würde strtruncate(str, n) = join(take(str, n)) machen.

Beispiel:

%Vor%

Beachten Sie, dass Ihr Code für Unicode-Zeichenfolgen nicht vollständig gültig ist.

    
Fengyang Wang 15.09.2016 01:30
quelle
3

Wenn die Zeichenfolge ASCII ist, ist das ziemlich effizient:

%Vor%

Oder an Ort und Stelle:

%Vor%

Für Unicode ist @Fengyang Wangs Methode sehr schnell, aber die Konvertierung in ein Char -Array kann etwas schneller sein, wenn Sie nur das Ende der Zeichenkette abschneiden:

%Vor%

Timing:

%Vor%

Bearbeiten: Hoppla. Ich habe gerade gemerkt, dass ich die ursprüngliche Zeichenkette in trunc5 zerstöre. Dies sollte korrekt sein, aber mit weniger überlegener Leistung:

%Vor%

Neue Zeiten:

%Vor%

Aaand new edit: Aargh, habe die Timing-Funktion vergessen. Ich gebe eine ASCII-Zeichenfolge ein:

%Vor%

Letzte Änderung (hoffe ich): Probiere @Dan Getz's truncate_grapheme aus und benutze Unicode-Strings:

%Vor%

Timing:

%Vor%

So scheint der letzte eindeutig der beste (und dieser Beitrag ist jetzt viel zu lang.)

    
DNF 15.09.2016 08:08
quelle
2

Sie könnten verwenden:

%Vor%

Auch

%Vor%     
Michael Ohlrogge 15.09.2016 01:25
quelle
2

Sie könnten die Funktion graphemes verwenden:

%Vor%

Beispiel:

%Vor%

Überprüfen Sie die Funktion truncate :

%Vor%

So könnte die Lösung so aussehen:

%Vor%

Teste es:

%Vor%

Profil es:

%Vor%     
SalchiPapa 15.09.2016 08:06
quelle

Tags und Links