Question Remplacer les sauts de ligne dans une chaîne C #


Comment puis-je remplacer Line Breaks dans une chaîne en C #?


430
2017-10-26 13:20


origine


Réponses:


Utiliser remplacer par Environment.NewLine

myString = myString.Replace(System.Environment.NewLine, "replacement text")

Comme mentionné dans d’autres articles, si la chaîne provient d’un autre environnement (OS), vous devez remplacer l’implémentation de ces environnements. nouveaux caractères de contrôle de ligne.


613
2017-10-26 13:38



Les solutions affichées jusqu'ici ne remplacent que Environment.NewLine ou ils échouent si la chaîne de remplacement contient des sauts de ligne parce qu'ils appellent string.Replace plusieurs fois.

Voici une solution qui utilise une expression régulière pour faire les trois remplacements en un seul passage sur la chaîne. Cela signifie que la chaîne de remplacement peut contenir des sauts de ligne en toute sécurité.

string result = Regex.Replace(input, @"\r\n?|\n", replacementString);

352
2017-11-19 18:26



Pour étendre la réponse de The.Anyi.9, vous devez également être conscient de la différents types de saut de ligne en usage général. En fonction de l'origine de votre fichier, vous voudrez peut-être vous assurer de prendre toutes les alternatives ...

string replaceWith = "";
string removedBreaks = Line.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);

devrait vous faire partir ...


158
2017-10-26 13:34



Je voudrais utiliser Environment.Newline lorsque je voulais insérer une nouvelle ligne pour une chaîne, mais pas pour supprimer toutes les nouvelles lignes d'une chaîne.

En fonction de votre plate-forme, vous pouvez avoir différents types de nouvelles lignes, mais même dans une même plate-forme, différents types de nouvelles lignes sont utilisés. En particulier lorsqu'il s'agit de formats de fichiers et de protocoles.

string ReplaceNewlines(string blockOfText, string replaceWith)
{
    return blockOfText.Replace("\r\n", replaceWith).Replace("\n", replaceWith).Replace("\r", replaceWith);
}

32
2017-10-26 13:41



Si votre code est supposé fonctionner dans des environnements différents, je considérerais utiliser le Environment.NewLine constante, puisque c’est précisément la newline utilisé dans l'environnement spécifique.

line = line.Replace(Environment.NewLine, "newLineReplacement");

Cependant, si vous obtenez le texte d'un fichier provenant d'un autre système, il se peut que la réponse ne soit pas correcte, et vous devez remplacer par la constante de nouvelle ligne utilisée sur l'autre système. Ce sera typiquement \n ou \r\n.


17
2017-10-26 13:47



Ne pas oublier que remplacer ne fait pas le remplacement dans la chaîne, mais renvoie une nouvelle chaîne avec les caractères remplacés. Ce qui suit va supprimer les sauts de ligne (ne pas les remplacer). J'utiliserais la méthode de @Brian R. Bondy pour les remplacer par quelque chose d'autre, peut-être comme méthode d'extension. N'oubliez pas de vérifier les valeurs NULL avant d'appeler Replace ou les méthodes d'extension fournies.

string line = ...

line = line.Replace( "\r", "").Replace( "\n", "" );

Comme méthodes d'extension:

public static class StringExtensions
{
   public static string RemoveLineBreaks( this string lines )
   {
      return lines.Replace( "\r", "").Replace( "\n", "" );
   }

   public static string ReplaceLineBreaks( this string lines, string replacement )
   {
      return lines.Replace( "\r\n", replacement )
                  .Replace( "\r", replacement )
                  .Replace( "\n", replacement );
   }
}

14
2018-02-19 14:56



Pour vous assurer que toutes les possibilités de sauts de ligne (Windows, Mac et Unix) sont remplacées, vous devez utiliser:

string.Replace("\r\n", "\n").Replace('\r', '\n').Replace('\n', 'replacement');

et dans cet ordre, pour ne pas faire de sauts de ligne supplémentaires, lorsque vous trouvez une combinaison de caractères de fin de ligne.


8
2017-08-25 18:58



J'avais besoin de remplacer le \r\n avec un retour chariot réel et le saut de ligne et remplacer \t avec un onglet réel. Donc je suis venu avec ce qui suit:

public string Transform(string data)
{
    string result = data;
    char cr = (char)13;
    char lf = (char)10;
    char tab = (char)9;

    result = result.Replace("\\r", cr.ToString());
    result = result.Replace("\\n", lf.ToString());
    result = result.Replace("\\t", tab.ToString());

    return result;
}

6
2017-10-12 13:28



var answer = Regex.Replace(value, "(\n|\r)+", replacementString);

3
2018-03-31 02:37



Pourquoi pas les deux?

string ReplacementString = "";

Regex.Replace(strin.Replace(System.Environment.NewLine, ReplacementString), @"(\r\n?|\n)", ReplacementString);

Remarque: Remplacer strin avec le nom de votre chaîne d'entrée.


3
2017-10-26 13:23