web-dev-qa-db-fra.com

fractionner une chaîne en fonction de plusieurs délimiteurs de caractères

J'ai une chaîne "4,6,8\n9,4"

Je veux diviser ceci basé sur, et\n

Le tableau de sortie doit être

4
6
8
9
4

Edit:

Maintenant, je lis la chaîne depuis la console, quand j'entre une chaîne comme ci-dessus dans la console, dans le code derrière je reçois comme "4,6,8\\n9,4". Maintenant que je veux diviser en utilisant "," and "\\n". Comment puis-je changer l'expression?

58
Kuntady Nithesh

Utilisez string.Split (char [])

string strings = "4,6,8\n9,4";
string [] split = strings .Split(new Char [] {',' , '\n' });

[~ # ~] éditer [~ # ~]

Essayez de suivre si vous obtenez des éléments vides inutiles. Méthode String.Split (String [], StringSplitOptions)

string [] split = strings .Split(new Char [] {',' , '\n' }, 
                                 StringSplitOptions.RemoveEmptyEntries);

EDIT2

Cela fonctionne pour votre question mise à jour. Ajoutez tous les caractères fractionnés nécessaires au char [].

string [] split = strings.Split(new Char[] { ',', '\\', '\n' },
                                 StringSplitOptions.RemoveEmptyEntries);
110
CharithJ

Une autre option consiste à utiliser Regex.Split . Ceci est utile lorsque les séquences scindées sont plus complexes. Par exemple, si des espaces peuvent également faire partie des délimiteurs de division tels que:

"4,6,8 , 9\\n\\n4"

Ensuite:

using System.Text.RegularExpressions;
var i = "4,6,8 , 9\n\n4";
var o = Regex.Split(i, @"[,\s\n]+");
// now o is:
// new string[] { "4", "6", "8", "9" }

Notez que l’expression rationnelle utilisée est "plus acceptante" - elle ignore l’espace vide entre les\n et accepte "4 6 8 9 4" de la même manière - de sorte que le précédent indique un point: il y a plus qu'un moyen de peler un chat.

Bonne codage.

8
user166390
var s = "4,6,8\n9,4";
var split = s.Split(new char[]{',', '\n'});

Mais cela doit être une dupe ...

EDIT : Adressant le commentaire.

Ce code:

static void Main(string[] args)
{
    var s = "4,6,8\n9,4";

    foreach (var a in s.Split(new char[] { ',', '\n' }))
        System.Diagnostics.Debug.WriteLine(a);
}

Sortie ceci:

4
6
8
9
4

EDIT : La lecture des entrées depuis la console est différente. \n est différent lorsqu'il est entré manuellement.

static void Main(string[] args)
{
    var s = "4,6,8\\n9,4";

    foreach (var a in s.Split(new string[] { ",", "\\n" }, StringSplitOptions.RemoveEmptyEntries))
        System.Diagnostics.Debug.WriteLine(a);
}
6
Austin Salonen
string tosplit = "4,6,8\n9,4";
var split = tosplit.Split(new Char [] {',', '\n' });

Juste au cas où vous n'imprimez pas/ne le voyez pas correctement:

split.ToList().ForEach(Console.WriteLine);
4
manojlds

Pouvez-vous faire un string.Replace ('\ n', ',') suivi du string.split (',')?

2
andrew