Die Anzahl der Zeichen in einer Zeichenfolge begrenzen und den Rest abschneiden

Lesezeit: 4 Minuten

Benutzer-Avatar
Flethuseo

Ich muss am Ende eines Protokolls eine Übersichtstabelle mit einigen Werten erstellen, die innerhalb einer Klasse abgerufen werden. Die Tabelle muss im Format mit fester Breite gedruckt werden. Ich habe den Code dafür bereits, aber ich muss Strings, Doubles und Ints auf eine Größe mit fester Breite beschränken, die im Code fest codiert ist.

Angenommen, ich möchte eine Tabelle mit fester Breite drucken

    int,string,double,string
    int,string,double,string
    int,string,double,string
    int,string,double,string

    and the fixed widths are: 4, 5, 6, 6.

Wenn ein Wert diese Breite überschreitet, müssen die letzten Zeichen abgeschnitten werden. Also zum Beispiel:

    124891, difference, 22.348, montreal

Die Zeichenfolgen, die gedruckt werden müssen, sollten sein:

    1248 diffe 22.348 montre

Ich denke, ich muss etwas im Konstruktor tun, der eine Zeichenfolge zwingt, eine bestimmte Anzahl von Zeichen nicht zu überschreiten. Ich werde wahrscheinlich die Doubles und Ints in eine Zeichenfolge umwandeln, damit ich die Anforderungen an die maximale Breite durchsetzen kann.

Ich weiß nicht, welche Methode dies tut oder ob eine Zeichenfolge instanziiert werden kann, um sich so zu verhalten. Die Verwendung des Formatierers hilft nur bei der Fixed-with-Formatierung zum Drucken der Zeichenfolge, schneidet jedoch keine Zeichen ab, die die maximale Länge überschreiten.

  • if (ff.length()>7) ff = ff.substring(0,7);

    – Fett

    24. Mai 2014 um 12:16 Uhr

Benutzer-Avatar
Jaksa

Sie können auch verwenden String.format("%3.3s", "abcdefgh"). Die erste Ziffer ist die Mindestlänge (die Zeichenfolge wird aufgefüllt, wenn sie kürzer ist), die zweite Ziffer ist die maximale Länge und die Zeichenfolge wird abgeschnitten, wenn sie länger ist. So

System.out.printf("'%3.3s' '%3.3s'", "abcdefgh", "a");

wird herstellen

'abc' '  a'

(Sie können Anführungszeichen natürlich entfernen).

  • verwenden String.format(String format, Object... args) als gängiger Ansatz

    – Radistao

    27. März 2017 um 7:51 Uhr


  • Was ist String-Syntax, um die letzten n Zeichen einer Zeichenfolge zu erhalten?

    – Shijil

    8. August 2018 um 12:28 Uhr

  • Wahrscheinlich langsamer als String::substring(0, max) jedoch.

    – Laurent Gregoire

    11. Juli 2019 um 8:37 Uhr

Benutzer-Avatar
GETah

Verwenden Sie dies, um die nicht benötigten Zeichen abzuschneiden:

String.substring(0, maxLength); 

Beispiel:

String aString ="123456789";
String cutString = aString.substring(0, 4);
// Output is: "1234" 

Um sicherzustellen, dass Sie keine IndexOutOfBoundsException erhalten, wenn die Eingabezeichenfolge kleiner als die erwartete Länge ist, gehen Sie stattdessen wie folgt vor:

int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);

Wenn Sie möchten, dass Ihre ganzen Zahlen und Doubles eine bestimmte Länge haben, dann schlage ich vor, dass Sie verwenden Zahlenformat um Ihre Zahlen zu formatieren, anstatt ihre Zeichenfolgendarstellung abzuschneiden.

  • Hmm. Es wäre toll, wenn “Precision” auch für String funktioniert.

    – Sandeep Jindal

    30. Oktober 2014 um 22:04 Uhr

  • Ich finde inputString.substring(0, Math.min(MAX_CHAR, inputString.length())); ist viel besser lesbar.

    – pvorb

    29. November 2015 um 12:50 Uhr

  • oder inputString.substring(0, (inputString.length() > MAX_CHAR) ? MAX_CHAR : inputString.length())

    – CervEd

    6. März 2018 um 22:24 Uhr

  • Dies in Verbindung mit der in JDK 12 eingeführten Funktion String.transform() ist das Beste 🙂

    – Tazmaniax

    29. November 2020 um 13:23 Uhr

  • Diese Antwort kann eine ungültige Zeichenfolge erzeugen, wenn sie Ersatzpaare enthält.

    – Bumm

    18. Januar um 9:17 Uhr

Aus Gründen der Lesbarkeit bevorzuge ich Folgendes:

if (inputString.length() > maxLength) {
    inputString = inputString.substring(0, maxLength);
}

über die akzeptierte Antwort.

int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);

Benutzer-Avatar
khriskooper

Sie können die Apache Commons verwenden StringUtils.substring(String str, int start, int end) statische Methode, die auch nullsicher ist.

Sehen: http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#substring%28java.lang.String,%20int,%20int%29

und http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/src-html/org/apache/commons/lang/StringUtils.html#line.1961

Sie können dies einfach erreichen, indem Sie verwenden

    shortString = longString.substring(0, Math.min(s.length(), MAX_LENGTH));

Benutzer-Avatar
Gibolt

Wenn Sie nur eine maximale Länge wünschen, verwenden Sie StringUtils.left! Nein if oder ternary ?: erforderlich.

int maxLength = 5;
StringUtils.left(string, maxLength);

Ausgabe:

      null -> null
        "" -> ""
       "a" -> "a"
"abcd1234" -> "abcd1"

Left Dokumentation

Benutzer-Avatar
Mösio

Die Lösung kann sein java.lang.String.format("%" + maxlength + "s", string).trim()so was:

int maxlength = 20;
String longString = "Any string you want which length is greather than 'maxlength'";
String shortString = "Anything short";
String resultForLong = java.lang.String.format("%" + maxlength + "s", longString).trim();
String resultForShort = java.lang.String.format("%" + maxlength + "s", shortString).trim();
System.out.println(resultForLong);
System.out.println(resultForShort);

Ausgang:

Any string you want w

Anything short

  • Die Verwendung von „%.20s“ anstelle von „%20s“ verhindert die Notwendigkeit des Trimmens

    – Robert

    19. März 2020 um 9:07 Uhr


1204760cookie-checkDie Anzahl der Zeichen in einer Zeichenfolge begrenzen und den Rest abschneiden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy