2009-06-23 12 views
5

Ho una stringa = "google.com 220 USD 3d 19h".C# stringa divisa

Voglio estrarre solo la parte ".com" .......

che cosa è il modo più semplice per manipolare il metodo stringa divisa per ottenere questo risultato?

+11

stringa estratta = ".com" ;. Questo è il modo più semplice e non hai nemmeno bisogno di usare string.split! :-) –

+1

Dettagli insufficienti: se fornisci ulteriori esempi di stringhe e ciò che devi estrarre, può essere ideata una buona soluzione generale. – Oded

+0

Considera l'utilizzo di un'espressione regolare. –

risposta

8

Suppongo che vogliate estrarre il nome di dominio o la parte TLD della stringa. Questo dovrebbe fare il lavoro:

var str = "google.com 220 USD 3d 19h"; 
var domain = str.Split(' ')[0];   // google.com 
var tld = domain.Substring(domain.IndexOf('.')) // .com 
+0

Non sono sicuro del motivo per cui è stato votato, il codice tld è sbagliato. Immagino che volevi dire: var tld = domain.Substring (domain.IndexOf ('.')); // .com – RedFilter

+0

Presumo che var tld = domain.Substring (domain.IndexOf ('.')) era pensato (modificato, spero che non ti dispiaccia Noldorin)? –

+0

@OrbMan: sei un giudice terribilmente severo! Era chiaramente solo un refuso, che avresti potuto aggiustare. Presumo che il voto negativo sia arrivato da te. : P – Noldorin

1

bene se si può supporre che lo spazio è separatore la sua facile come

stringa completa

char [] delimiterChars = { ''}; // usato in modo da poter specificare più delimensioni string [] words = full.Split (delimiterChars, 1); // divide solo una parola con lo spazio

risultato stringa = parole [0] // in questo modo è possibile accedervi

1

Supponendo che si desidera che il dominio di primo livello:

string str = "google.com 220 USD 3d 19h"; 
string tld = str.Substring(str.LastIndexOf('.')).Split(' ')[0]; 
Console.WriteLine(tld); 

uscita:

.com 

Questo prende in considerazione i sottodomini.

3

idea alternativo

string str = "google.com 220 USD 3d 19h"; 
string match = ".com"; 
string dotcomportion = str.Substring(str.IndexOf(match), match.Length); 
+0

Funziona solo se il TLD è .com. Considerando che il punto è di scoprire realmente qual è il tld, questo sembra strano. – Brian

+0

@Brian: mentre sono d'accordo sul fatto che il codice non è la soluzione giusta, seleziona qualsiasi TLD a tre lettere (come .net o .org). Mancherà comunque qualsiasi altro TLD (come .de o .info). –

1

Se per estratto intendi rimuovere, è possibile utilizzare il

var result = str.Replace ("" "com".) Metodo Sostituire;

0

utilizza Regex sarebbe l'opzione migliore, ma se si desidera utilizzare Split poi

var str = "google.com 220 USD 3d 19h"; 
     var str1 = str.Split(' ')[0]; 
     var str2 = str1.Split('.')[0]; 
     Console.WriteLine(str1.Replace(str2, string.Empty)); 
1

So che hai chiesto sull'utilizzo del metodo Split, ma io non sono sicuro che sia la strada migliore. La divisione di una stringa alloca almeno 5 nuove stringhe che vengono immediatamente ignorate e quindi devono attendere fino a quando non verrà rilasciato GC. Stai meglio usando l'indicizzazione nella stringa e tirando fuori solo ciò di cui hai bisogno.

string str = "google.com 220 USD 3d 19h"; 
int ix = str.IndexOf(' '); 
int ix2 = str.IndexOf('.', 0, ix); 
string tld = str.Substring(ix2, ix - ix2); 
string domain = str.Substring(0, ix); 
0

non riesco a pensare a una ragione al mondo che si vorrebbe utilizzare String.Split per questo scopo. Questo problema è risolto al meglio con un'espressione regolare.

Qui è un piccolo programma che illustra come farlo:

using System; 
using System.Text.RegularExpressions; 

class Program 
{ 
    static void Main() 
    { 
     String foo = "google.com 220 USD 3d 19h"; 
     Regex regex = new Regex(@"(.com)", RegexOptions.IgnoreCase); 
     Match match = regex.Match(foo); 

     if (match.Success) 
      Console.WriteLine(match.Groups[1].Value); 
    } 
} 
+0

Downvoters: c'è un motivo per cui questo è stato downvoted (a parte il fatto che non ho usato String.Split)? –

+0

Non ho fatto un downvote, ma il tuo tono potrebbe avere qualcosa a che fare con esso. Solo perché non puoi pensare a una ragione non significa che non ce n'è una. –

+0

Hmm, buon punto - Sembro un po 'idiota :) Grazie per avermelo fatto notare. –

Problemi correlati