Échapper aux délimiteurs de tuyaux dans String.split
Lorsque vous utilisez la méthode split sur une chaîne, il est important de comprendre l'importance d'échapper certains caractères . En particulier, le caractère pipe (|) agit comme un délimiteur spécial, et sa présence sans s'échapper peut conduire à des résultats inattendus.
Pourquoi échapper à la pipe ?
Le La méthode split attend un argument d'expression régulière, où chaque caractère représente une règle de correspondance de modèle spécifique. Lorsqu'un canal sans échappement est utilisé, il est interprété comme un opérateur OU logique dans l'expression régulière. Cela signifie qu'il représente un modèle qui correspond soit à une chaîne vide, soit à une autre chaîne vide, ce qui n'est pas le comportement prévu.
Exemple
Considérez l'extrait de code suivant : qui tente d'analyser une ligne avec des valeurs délimitées par des barres verticales :
private ArrayList<String> parseLine(String line) { ArrayList<String> list = new ArrayList<String>(); String[] list_str = line.split("|"); for(String s:list_str) { list.add(s); System.out.print(s+ "|"); } return list; }
Sans échapper à la barre verticale, ce code correspondra de manière incorrecte à chaque caractère de la chaîne en tant que délimiteur, ce qui entraînera un tableau vide.
Solution : Échapper au tuyau
Pour garantir que le tuyau est reconnu comme un délimiteur littéral, il doit être échappé à l'aide du caractère barre oblique inverse. Cela indique à la méthode split que le tube doit être traité comme un caractère plutôt que comme un opérateur regex :
private ArrayList<String> parseLine(String line) { ArrayList<String> list = new ArrayList<String>(); String[] list_str = line.split("\|"); for(String s:list_str) { list.add(s); System.out.print(s+ "|"); } return list; }
En échappant le tube en utilisant "|", la méthode split sépare désormais correctement les valeurs dans la ligne .
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!