2009-06-23 7 views
5

J'ai une chaîne = "google.com 220 USD 3d 19h".C# chaîne split

Je veux extraire seulement la partie « .com » .......

ce qui est la meilleure façon de manipuler la méthode de chaîne de division pour obtenir ce résultat?

+11

extraite = ".com" ;. C'est le moyen le plus simple, et vous n'avez même pas besoin d'utiliser le fichier string.split! :-) –

+1

Pas assez de détails - si vous fournissez d'autres exemples de chaînes et ce que vous devez extraire, une bonne solution générale peut être imaginée. – Oded

+0

Envisagez d'utiliser une expression régulière. –

Répondre

8

Je suppose que vous voulez extraire le nom de domaine ou la partie TLD de la chaîne. Cela devrait faire le travail:

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

Je ne sais pas pourquoi cela est voté, le code tld est faux. Je suppose que vous vouliez dire: var tld = domain.Substring (domain.IndexOf ('.')); // .com – RedFilter

+0

Je suppose que var tld = domain.Substring (domain.IndexOf ('.')) était signifié (édité dedans, j'espère que cela ne vous dérange pas Noldorin)? –

+0

@OrbMan: Vous êtes un juge terriblement sévère! C'était clairement une faute de frappe, que vous auriez pu régler vous-même. Je suppose que le vote négatif vient de vous. : P – Noldorin

1

bien si vous pouvez supposer que l'espace est seperator son aussi facile que

chaîne complète

char [] delimiterChars = { ''}; // utilisé pour que vous puissiez spécifier plus de delims string [] words = full.Split (delimiterChars, 1); // divise un seul mot avec l'espace

string result = mots [0] // voici comment vous pouvez y accéder

1

En supposant que vous voulez que le domaine de niveau supérieur:

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

sortie:

.com 

Ceci prend en compte les sous-domaines.

3

idée Autre

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

Cela ne fonctionne que si le TLD est .com. Considérant que le but est de découvrir réellement ce qu'est le tld, cela semble étrange. – Brian

+0

@Brian: même si je suis d'accord que le code n'est pas la bonne solution, il sélectionne tout TLD à trois lettres (tel que .net ou .org). Il manquera cependant tout autre TLD (tel que .de ou .info). –

1

Si par extrait vous voulez dire supprimer, vous pouvez utiliser la méthode Remplacer

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

0

utilisant l'expression rationnelle serait la meilleure option, mais si vous souhaitez utiliser de Split puis

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

Je sais que vous avez parlé en utilisant la méthode de Split, mais je ne suis pas sûr que ce le meilleur itinéraire. La division d'une chaîne alloue au moins 5 nouvelles chaînes qui sont immédiatement ignorées, puis doivent attendre jusqu'à ce que GC soit libéré. Il vaut mieux simplement utiliser l'indexation dans la chaîne et sortir ce dont vous avez besoin.

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

Je ne peux pas penser à une raison dans le monde que vous voulez utiliser String.Split à cet effet. Ce problème est mieux résolu avec une expression régulière.

Voici un petit programme qui montre comment faire:

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); 
    } 
} 
chaîne
+0

Downvoters - Y at-il une raison pour laquelle cela a été downvoted (autre que le fait que je n'ai pas utilisé String.Split)? –

+0

Je n'ai pas baissé la note, mais votre ton peut avoir quelque chose à voir avec ça. Juste parce que vous ne pouvez pas penser à une raison ne signifie pas qu'il n'y en a pas. –

+0

Hmm, bon point - j'ai l'air d'être un peu un abruti :) Merci de le signaler. –