web-dev-qa-db-fra.com

Comment supprimer les caractères d'une nouvelle ligne d'une chaîne?

J'ai une chaîne au format suivant

string s = "This is a Test String.\n   This is a next line.\t This is a tab.\n'

Je veux supprimer toutes les occurrences de \n et \r de la chaîne ci-dessus.

J'ai essayé string s = s.Trim(new char[] {'\n', '\r'}); mais cela n'a pas aidé.

130
Ashish Ashu

J'aime utiliser des expressions régulières. Dans ce cas, vous pourriez faire:

string replacement = Regex.Replace(s, @"\t|\n|\r", "");

Les expressions régulières ne sont pas aussi populaires dans le monde .NET que dans les langages dynamiques, mais elles offrent beaucoup de pouvoir pour manipuler des chaînes.

241
Kirk

Vous voulez utiliser String.Replace pour supprimer un caractère.

s = s.Replace("\n", String.Empty);
s = s.Replace("\r", String.Empty);
s = s.Replace("\t", String.Empty);

Notez que String.Trim(params char[] trimChars) supprime uniquement les caractères de début et de fin dans trimChars de l'instance invoquée le.

Vous pouvez créer une méthode d’extension, ce qui évite les problèmes de performances liés à la création de nombreuses chaînes temporaires:

static string RemoveChars(this string s, params char[] removeChars) {
    Contract.Requires<ArgumentNullException>(s != null);
    Contract.Requires<ArgumentNullException>(removeChars != null);
    var sb = new StringBuilder(s.Length);
    foreach(char c in s) { 
        if(!removeChars.Contains(c)) {
            sb.Append(c);
        }
    }
    return sb.ToString();
}
61
jason

Je sais que ceci est un ancien post, mais je pensais partager la méthode que j'utilisais pour supprimer les caractères de nouvelle ligne.

s.Replace(Environment.NewLine, "");

Références:

MSDN String.Replace, méthode et Propriété MSDN Environment.NewLine

Si la vitesse et l’utilisation réduite de la mémoire sont importantes, procédez comme suit:

var sb = new StringBuilder(s.Length);

foreach (char i in s)
    if (i != '\n' && i != '\r' && i != '\t')
        sb.Append(i);

s = sb.ToString();
13
cdhowie

fais juste ça 

s = s.Replace("\n", String.Empty).Replace("\t", String.Empty).Replace("\r", String.Empty);
3
Mahmoud ElMansy

Une approche LINQ:

string s = "This is a Test String.\n   This is a next line.\t This is a tab.\n'";

string s1 = String.Join("", s.Where(c => c != '\n' && c != '\r' && c != '\t'));
3
w.b

Eh bien ... j'aimerais que vous compreniez des domaines d'espace plus spécifiques. \t correspond en fait à un espace horizontal et non à un espace vertical. (test en insérant \t dans le Bloc-notes)

Si vous utilisez Java, utilisez simplement \v. Voir la référence ci-dessous.

\h - Un caractère blanc horizontal:

[\t\xA0\u1680\u180e\u2000-\u200a\u202f\u205f\u3000] 

\v - Un caractère d'espacement vertical:

[\n\x0B\f\r\x85\u2028\u2029]

Mais je suis conscient que vous utilisez .NET. Donc, ma réponse au remplacement de chaque espace vertical est ..

string replacement = Regex.Replace(s, @"[\n\u000B\u000C\r\u0085\u2028\u2029]", "");
0
Kang Andrew

Le bon choix dépend vraiment de la taille de la chaîne d'entrée et des exigences en matière de mémoire et de force, mais j'utiliserais une expression régulière telle que 

string result = Regex.Replace(s, @"\r\n?|\n|\t", String.Empty);

Ou si nous devons appliquer le même remplacement plusieurs fois, il est préférable d’utiliser une version compilée pour Regex telle que

var regex = new Regex(@"\r\n?|\n|\t", RegexOptions.Compiled); 
string result = regex.Replace(s, String.Empty);

REMARQUE: différents scénarios requièrent différentes approches pour obtenir les meilleures performances et la consommation de mémoire minimale.

0
kalitsov