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#
?
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);
}
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.
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);
}
}
}
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.
...En bref:
string[] arr = "This is a sentence".Split(new string[] { "is" }, StringSplitOptions.None);
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.
Ou utilisez ce code; (idem: nouvelle chaîne [])
.Split(new[] { "Test Test" }, StringSplitOptions.None)
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]");
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]