2009-06-23 9 views
5

Mam ciąg = "google.com 220 USD 3d 19h".C# string split

chcę wyodrębnić tylko część „.com” .......

co jest najprostszym sposobem, aby manipulować metody podzielonego ciąg, aby uzyskać ten wynik?

+11

ciąg ekstrakcji = ".com" ;. To najprostszy sposób, a nawet nie musisz używać string.split! :-) –

+1

Niewystarczająca ilość szczegółów - jeśli podasz dalsze przykłady ciągów i to, co musisz wyodrębnić, możesz stworzyć dobre ogólne rozwiązanie. – Oded

+0

Rozważ użycie wyrażenia regularnego. –

Odpowiedz

8

Zgaduję, że chcesz albo wyodrębnić nazwę domeny, albo TLD część ciągu. To powinno załatwić sprawę:

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

Nie wiem, dlaczego jest to głosowane, kod tld jest nieprawidłowy. Zgaduję, że chciałeś powiedzieć: var tld = domain.Substring (domain.IndexOf ('.')); // .pl – RedFilter

+0

Zakładam, że var tld = domain.Substring (domain.IndexOf ('.')) było przeznaczone (edytowałem to, mam nadzieję, że nie masz nic przeciwko Noldorinowi)? –

+0

@ OrbMan: Jesteś okropnie surowym sędzią! To był po prostu literówka, którą mógłbyś naprawić. Zakładam, że głosowanie w dół pochodzi od ciebie. : P – Noldorin

1

dobrze, jeśli można założyć, że przestrzeń jest Separator jej tak proste jak

ciąg pełnej

char [] = {delimiterChars ''}; // używane, aby można było podać więcej ograniczeń string [] words = full.Split (delimiterChars, 1); // dzieli tylko jedno słowo z miejsca

wynik ciąg = słowa [0] // ten sposób można go

1

dostęp Zakładając chcesz domeny najwyższego poziomu:

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

Output:

.com 

Uwzględnia to subdomeny.

3

Alternatywny pomysł

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

Działa to tylko wtedy, gdy TLD to .com. Biorąc pod uwagę, że chodzi o to, aby rzeczywiście dowiedzieć się, co to jest tld, wydaje się to dziwne. – Brian

+0

@Brian: podczas gdy zgadzam się, że kod nie jest właściwym rozwiązaniem, wybiera on dowolną trzyliterową TLD (taką jak .net lub .org). Będzie jednak brakowało każdej innej TLD (takiej jak .de lub .info). –

1

Jeśli masz na myśli przez ekstraktu usunąć, można użyć metody Replace

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

0

przy użyciu regex byłoby najlepszym rozwiązaniem, ale jeśli chcesz używać Splitu następnie

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

wiem, że poprosił o użyciu metody podziału, ale nie jestem pewien, że to najlepsza droga. Dzielenie łańcucha przydzieli co najmniej 5 nowych ciągów, które są natychmiast ignorowane, a następnie muszą czekać, aż GC zostanie zwolniony. Lepiej jest po prostu użyć indeksowania w ciągu i wyciągnąć tylko to, czego potrzebujesz.

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

nie mogę myśleć bez powodu na świecie, które chcesz używać String.Split do tego celu. Ten problem najlepiej rozwiązać za pomocą wyrażenia regularnego.

Oto mały program, który pokazuje, jak to zrobić:

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

Downwotery - czy istnieje powód, dla którego to zostało odrzucone (inne niż fakt, że nie użyłem String.Split)? –

+0

Nie spadłem, ale twój ton może mieć z tym coś wspólnego. Tylko dlatego, że nie możesz wymyślić przyczyny, nie oznacza, że ​​jej nie ma. –

+0

Hmm, dobry punkt - wydaje mi się, że to trochę palant :) Dzięki, że to wskazałem. –