Disons que je dois diviser la chaîne comme ceci:
Chaîne d'entrée: "Mon. Nom. Est Bond._James Bond!" Sortie 2 chaînes:
J'ai essayé ceci:
int lastDotIndex = inputString.LastIndexOf(".", System.StringComparison.Ordinal);
string firstPart = inputString.Remove(lastDotIndex);
string secondPart= inputString.Substring(lastDotIndex + 1, inputString.Length - firstPart.Length - 1);
Quelqu'un peut-il proposer une manière plus élégante?
string s = "My. name. is Bond._James Bond!";
int idx = s.LastIndexOf('.');
if (idx != -1)
{
Console.WriteLine(s.Substring(0, idx)); // "My. name. is Bond"
Console.WriteLine(s.Substring(idx + 1)); // "_James Bond!"
}
Vous pouvez également utiliser un peu de LINQ. La première partie est un peu verbeuse, mais la dernière partie est assez concise:
string input = "My. name. is Bond._James Bond!";
string[] split = input.Split('.');
string firstPart = string.Join(".", split.Take(split.Length - 1)); //My. name. is Bond
string lastPart = split.Last(); //_James Bond!
string[] theSplit = inputString.Split('_'); // split at underscore
string firstPart = theSplit[0]; // get the first part
string secondPart = "_" + theSplit[1]; // get the second part and concatenate the underscore to at the front
EDIT: Suite aux commentaires; cela ne fonctionne que si vous avez une instance du caractère de soulignement dans votre chaîne d'entrée.
Plus amusant ... Zut ouais !!
var s = "My. name. is Bond._James Bond!";
var firstSplit = true;
var splitChar = '_';
var splitStrings = s.Split(new[] { splitChar }, StringSplitOptions.RemoveEmptyEntries)
.Select(x =>
{
if (!firstSplit)
{
return splitChar + x;
}
firstSplit = false;
return x;
});