2009-09-16 18 views

risposta

51

Non esiste un modo semplice per eseguire ciò utilizzando string.Split. (Beh, eccetto per specificare tutte le permutazioni della stringa suddivisa per ogni carattere maiuscolo/minuscolo in un array - non molto elegante, credo che sarete d'accordo.)

Tuttavia, il Regex.Split dovrebbe fare il lavoro abbastanza bene.

Esempio:

var parts = Regex.Split(input, "aa", RegexOptions.IgnoreCase); 
+0

Non avevo mai sentito parlare di Regex.Split() ... grazie! –

+0

Nessun problema. E sì, è una di quelle piccole gemme nascoste nel quadro. – Noldorin

+0

Visual Basic lo fa così facilmente (con 'Strings.Split') ... Ho davvero intenzione di rimpiangere il passaggio a C#? – beppe9000

5

Nel vostro algoritmo, è possibile utilizzare il metodo String.IndexOf e passare OrdinalIgnoreCase come parametro StringComparison.

+1

Quindi non c'è modo di sfruttare String.Split? – jdelator

4

La mia risposta non è valida come Noldorin's, ma la lascerò in modo che le persone possano vedere il metodo alternativo. Ciò non è ottimale per le suddivisioni semplici, ma è più flessibile se è necessario eseguire analisi più complesse.

using System.Text.RegularExpressions; 

string data = "asdf aA asdfget aa uoiu AA"; 
string aaRegex = "(.+?)[aA]{2}"; 

MatchCollection mc = Regex.Matches(data, aaRegex); 

foreach(Match m in mc) 
{ 
    Console.WriteLine(m.Value); 
} 
5

Se non si cura di caso, allora la cosa più semplice da fare è forzare la stringa in maiuscolo o minuscolo prima di utilizzare scissione.

stringbits = datastring.ToLower().Split("aa") 

Se vi preoccupate per caso per i bit interessanti della stringa, ma non i separatori quindi vorrei usare String.Replace per forzare tutti i separatori ad un caso specifico (superiore o inferiore, non importa) e quindi chiama String.Split utilizzando il caso corrispondente per il separatore.

strinbits = datastring.Replace("aA", "aa").Replace("AA", "aa").Split("aa") 
2

Non è la versione pretties ma funziona anche:

"asdf aA asdfget aa uoiu AA".Split(new[] { "aa", "AA", "aA", "Aa" }, StringSplitOptions.RemoveEmptyEntries); 
+0

Sì, questo è ciò che intendevo per permutazione: diventa piuttosto ingombrante per stringhe più lunghe. – Noldorin

1
public static List<string> _Split(this string input,string[] splt) 
    { 
     List<string> _Result=new List<string>(); 
     foreach(string _splt in splt) 
     { 
      if (splt.Count() == 1) 
      { 
       _Result.AddRange(Regex.Split(input, _splt, RegexOptions.IgnoreCase).ToList()); 
      } 
      else 
      { 
       List<string> NewStr = Regex.Split(input, _splt, RegexOptions.IgnoreCase).ToList(); 
       foreach(string _NewStr in NewStr) 
       { 
        List<string> NewSplt = splt.ToList(); 
        NewSplt.Remove(_splt); 
        return _Split(_NewStr, NewSplt.ToArray()); 
       } 
      } 
     } 
     return _Result; 
    } 

quindi utilizzare questa funzione come muggito

public frmThematicConversation() 
{ 
    InitializeComponent(); 
    string str = "a b c d e f g h a b c f a d c b f"; 
    string[] splt = { "a", "b" }; 
    List<string> _result = str._Split(splt); 
} 
Problemi correlati