web-dev-qa-db-fra.com

Comment supprimer les nouvelles lignes du début et de la fin d'une chaîne (Java)?

J'ai une chaîne qui contient du texte suivi d'une ligne vierge. Quel est le meilleur moyen de conserver la pièce avec du texte tout en supprimant la nouvelle ligne d'espacement à la fin?

114
Confiqure

Utilisez la méthode String.trim() pour supprimer les espaces (espaces, nouvelles lignes, etc.) à partir du début et de la fin de la chaîne.

String trimmedString = myString.trim();
253
Crozin
String.replaceAll("[\n\r]", "");
25
John B

Si votre chaîne est potentiellement null, envisagez d'utiliser StringUtils.trim() - version null-safe de String.trim() .

2
entpnerd

tl; dr

_String cleanString = dirtyString.strip() ; // Call new `String::string` method.
_

_String::strip…_

L'ancienne méthode String::trim a une définition étrange sur espace .

Comme indiqué dans ici , Java 11 ajoute de nouvelles méthodes strip… à la classe String. Celles-ci utilisent une définition plus claire des blancs selon Unicode. Voir les règles de cette définition dans la classe JavaDoc pour Character::isWhitespace .

Exemple de code.

_String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");
_

Ou vous pouvez décaper seulement le premier ou seulement le dernier blanc.

Vous ne mentionnez pas exactement quoi point (s) de code constituent vos nouvelles lignes. J'imagine que votre nouvelle ligne est probablement incluse dans cette liste de points de code ciblés par strip:

  • Il s'agit d'un caractère d'espace Unicode (SPACE_SEPARATOR, LINE_SEPARATOR ou PARAGRAPH_SEPARATOR), mais ce n'est pas également un espace insécable ('\ u00A0', '\ u2007', '\ u202F').
  • C'est '\ t', U + 0009 TABULATION HORIZONTALE.
  • C'est '\ n', U + 000A LINE FEED.
  • C'est '\ u000B', U + 000B TABULATION VERTICALE.
  • C'est '\ f', U + 000C FORM FEED.
  • C'est '\ r', U + 000D CARRIAGE RETURN.
  • Il s’agit de "\ u001C", SÉPARATEUR DE FICHIER U + 001C.
  • Il s’agit de "\ u001D", SÉPARATEUR DE GROUPE U + 001D.
  • C'est '\ u001E', U + 001E SEPARATOR RECORD.
  • C'est '\ u001F', U + 0
1
Basil Bourque
String trimStartEnd = "\n TestString1 linebreak1\nlinebreak2\nlinebreak3\n TestString2 \n";
System.out.println("Original String : [" + trimStartEnd + "]");
System.out.println("-----------------------------");
System.out.println("Result String : [" + trimStartEnd.replaceAll("^(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])|(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])$", "") + "]");
  1. Début d'une chaîne = ^,
  2. Fin d'une chaîne = $,
  3. combinaison de regex = | ,
  4. Linebreak =\r\n | [\ n\x0B\x0C\r\u0085\u2028\u2029]
1
hmmh

Je vais également ajouter une réponse à cette question car, même si j'avais la même question, la réponse fournie ne suffisait pas. Après réflexion, je me suis rendu compte que cela pouvait se faire très facilement avec une expression régulière.

Pour supprimer nouvelles lignes depuis le début:

// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);

System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");

et fin d'une chaîne:

// Trim right
String z = "\n\nfrom the end\n\n";

System.out.println("-" + z.split("\\n+$", 2)[0] + "-");

Je suis certain que ce n'est pas le moyen le plus efficace de couper une chaîne. Mais cela semble être le moyen le plus simple et le plus simple d’intégrer une telle opération.

Notez que la même méthode peut être utilisée pour supprimer toute variation et combinaison de caractères à l’une ou l’autre des extrémités, car c’est une simple expression rationnelle.

0
Zhro