web-dev-qa-db-fra.com

Comment diviser une chaîne par un séparateur multi-caractères en C #?

Et si je veux diviser une chaîne en utilisant un délimiteur qui est un mot?

Par exemple, This is a sentence.

Je veux diviser sur is et obtenir This et a sentence.

Dans Java, je peux envoyer une chaîne en tant que délimiteur, mais comment puis-je accomplir cela dans C#?

225
Saobi

http://msdn.Microsoft.com/en-us/library/system.string.split.aspx

Exemple tiré de la documentation:

string source = "[stop]ONE[stop][stop]TWO[stop][stop][stop]THREE[stop][stop]";
string[] stringSeparators = new string[] {"[stop]"};
string[] result;

// ...
result = source.Split(stringSeparators, StringSplitOptions.None);

foreach (string s in result)
{
    Console.Write("'{0}' ", String.IsNullOrEmpty(s) ? "<>" : s);
}
276
bruno conde

Vous pouvez utiliser la méthode Regex.Split , quelque chose comme ceci:

Regex regex = new Regex(@"\bis\b");
string[] substrings = regex.Split("This is a sentence");

foreach (string match in substrings)
{
   Console.WriteLine("'{0}'", match);
}

Edit : Cela correspond à l’exemple que vous avez donné. Notez qu'un ordinaire String.Split ​​sera également divisé sur le "est" à la fin du mot "This", d'où la raison pour laquelle j'ai utilisé le Regex méthode et inclus les limites de Word autour du "is". Notez cependant que si vous venez d'écrire cet exemple par erreur, alors String.Split ​​suffira probablement.

54
IRBMe

Basé sur les réponses existantes sur ce post, cela simplifie la mise en œuvre :)

namespace System
{
    public static class BaseTypesExtensions
    {
        /// <summary>
        /// Just a simple wrapper to simplify the process of splitting a string using another string as a separator
        /// </summary>
        /// <param name="s"></param>
        /// <param name="pattern"></param>
        /// <returns></returns>
        public static string[] Split(this string s, string separator)
        {
            return s.Split(new string[] { separator }, StringSplitOptions.None);
        }


    }
}
33
eka808
string s = "This is a sentence.";
string[] res = s.Split(new string[]{ " is " }, StringSplitOptions.None);

for(int i=0; i<res.length; i++)
    Console.Write(res[i]);

EDIT: Le "est" est complété des deux côtés par des espaces dans le tableau afin de préserver le fait que seulement voulez que le mot "soit" supprimé de la phrase et le mot "ceci" reste intact.

28
ahawker

...En bref:

string[] arr = "This is a sentence".Split(new string[] { "is" }, StringSplitOptions.None);
8
ParPar

Vous pouvez utiliser String.Replace () pour remplacer la chaîne divisée souhaitée par un caractère qui ne figure pas dans la chaîne, puis utiliser String.Split sur ce caractère pour fractionner la chaîne résultante avec le même effet.

5
Paul Sonier

Ou utilisez ce code; (idem: nouvelle chaîne [])

.Split(new[] { "Test Test" }, StringSplitOptions.None)
4
Cagdas

Voici une fonction d'extension permettant de scinder avec un séparateur de chaîne:

public static string[] Split(this string value, string seperator)
{
    return value.Split(new string[] { seperator }, StringSplitOptions.None);
}

Exemple d'utilisation:

string mystring = "one[split on me]two[split on me]three[split on me]four";
var splitStrings = mystring.Split("[split on me]");
2
SteveD
var dict = File.ReadLines("test.txt")
               .Where(line => !string.IsNullOrWhitespace(line))
               .Select(line => line.Split(new char[] { '=' }, 2, 0))
               .ToDictionary(parts => parts[0], parts => parts[1]);


or 

    enter code here

line="[email protected][email protected]";
string[] tokens = line.Split(new char[] { '=' }, 2, 0);

ans:
tokens[0]=to
token[1][email protected][email protected]
0
Prabu