J'ai une chaîne qui contient du texte suivi d'une ligne vide. Quelle est la meilleure façon de conserver la partie avec du texte, mais de supprimer le retour à la ligne d'espacement à la fin?
J'ai une chaîne qui contient du texte suivi d'une ligne vide. Quelle est la meilleure façon de conserver la partie avec du texte, mais de supprimer le retour à la ligne d'espacement à la fin?
Réponses:
Utilisez la String.trim()
méthode pour éliminer les espaces (espaces, nouvelles lignes, etc.) du début et de la fin de la chaîne.
String trimmedString = myString.trim();
String.replaceAll("[\n\r]", "");
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
L'ancienne String::trim
méthode a une étrange définition de l' espace blanc .
Comme discuté ici , Java 11 ajoute de nouvelles strip…
méthodes à la String
classe. Celles-ci utilisent une définition d'espaces plus basée sur 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 supprimer uniquement l' espace blanc de début ou de fin .
Vous ne mentionnez pas exactement quel (s) point (s) de code composent vos nouvelles lignes. J'imagine que votre nouvelle ligne est probablement incluse dans cette liste de points de code ciblés par strip
:
Ce code Java fait exactement ce qui est demandé dans le titre de la question, à savoir "supprimer les nouvelles lignes du début et de la fin d'une chaîne-java":
String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")
Supprimez les nouvelles lignes uniquement à partir de la fin de la ligne:
String.replaceAll("[\n\r]$", "")
Supprimez les nouvelles lignes uniquement depuis le début de la ligne:
String.replaceAll("^[\n\r]", "")
Si votre chaîne est potentiellement null
, envisagez d'utiliser StringUtils.trim()
- la version de String.trim()
.
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])$", "") + "]");
Si vous souhaitez uniquement supprimer les sauts de ligne (pas les espaces, les tabulations) au début et à la fin d'une chaîne (pas entre les deux), vous pouvez utiliser cette approche:
Utilisez une expression régulière pour supprimer les retours chariot ( \\r
) et les sauts de ligne ( \\n
) du début ( ^
) et de la fin ( $
) d'une chaîne:
s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")
Exemple complet:
public class RemoveLineBreaks {
public static void main(String[] args) {
var s = "\nHello\nWorld\n";
System.out.println("before: >"+s+"<");
s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "");
System.out.println("after: >"+s+"<");
}
}
Il sort:
before: >
Hello
World
<
after: >Hello
World<
Je vais également ajouter une réponse à cela car, même si j'avais la même question, la réponse fournie ne suffisait pas. Après avoir réfléchi, j'ai réalisé que cela pouvait être fait très facilement avec une expression régulière.
Pour supprimer les 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 la manière la plus efficace de couper une corde. Mais cela semble être le moyen le plus propre et le plus simple d'intégrer une telle opération.
Notez que la même méthode peut être utilisée pour couper toute variation et combinaison de caractères de chaque extrémité car il s'agit d'une simple expression régulière.
split()
est juste la limite. Laissez-le désactivé si vous souhaitez faire correspondre un nombre illimité de fois.
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");