Domanda Come faccio a dividere una stringa con un delimitatore a più caratteri in C #?


Cosa succede se voglio dividere una stringa usando un delimitatore che è una parola?

Per esempio, This is a sentence.

Voglio dividere is e prendi This e a sentence.

In Java, Posso inviare una stringa come delimitatore, ma come faccio a farlo C#?


211
2017-07-14 17:42


origine


risposte:


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

Esempio dai documenti:

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);
}

263
2017-07-14 17:46



Puoi usare il Regex.Split metodo, qualcosa del genere:

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

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

modificare: Questo soddisfa l'esempio che hai dato. Si noti che un ordinario String.Split si dividerà anche sul "è"alla fine della parola" Questo ", quindi perché ho usato il regex metodo e inclusi i confini delle parole attorno al "èNota, tuttavia, che se hai appena scritto questo esempio per errore, allora String.Split sarà probabilmente sufficiente.


51
2017-07-14 17:46



Sulla base delle risposte esistenti su questo post, questo semplifica l'implementazione :)

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);
        }


    }
}

29
2017-11-16 10:11



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: Il "è" è riempito su entrambi i lati con spazi nella matrice al fine di preservare il fatto che tu solo vuoi che la parola "sia" rimossa dalla frase e che la parola "questo" rimanga intatta.


25
2017-07-14 17:53



...In breve:

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

5
2017-07-24 07:21



È possibile utilizzare String.Replace () per sostituire la stringa di divisione desiderata con un carattere che non si verifica nella stringa e quindi utilizzare String.Split su quel carattere per dividere la stringa risultante per lo stesso effetto.


4
2017-07-14 17:46



O usare questo codice; (lo stesso: new String [])

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

3
2018-06-07 13:52



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="to=xxx@gmail.com=yyy@yahoo.co.in";
string[] tokens = line.Split(new char[] { '=' }, 2, 0);

ans:
tokens[0]=to
token[1]=xxx@gmail.com=yyy@yahoo.co.in

0
2017-10-20 12:12



Ecco una funzione di estensione per eseguire la divisione con un separatore di stringhe:

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

Esempio di utilizzo:

string mystring = "one[split on me]two[split on me]three[split on me]four";
var splitStrings = mystring.Split("[split on me]");

0
2018-04-28 22:30



string strData = "This is much easier"
int intDelimiterIndx = strData.IndexOf("is");
int intDelimiterLength = "is".Length;
str1 = strData.Substring(0, intDelimiterIndx);
str2 = strData.Substring(intDelimiterIndx + intDelimiterLength, strData.Length - (intDelimiterIndx + intDelimiterLength));

-5
2017-08-18 11:51