2009-06-23 26 views
5

Tengo una cadena = "google.com 220 USD 3d 19h".C# string split

Quiero extraer sólo la parte ".com" .......

cuál es la forma más fácil de manipular el método de cadena de división para obtener este resultado?

+11

cadena extraída = ".com" ;. Esa es la manera más fácil, y ni siquiera necesitas usar el string.split! :-) –

+1

No hay suficiente detalle: si proporciona más ejemplos de cadenas y lo que necesita extraer, se puede idear una buena solución general. – Oded

+0

Considera el uso de una expresión regular. –

Respuesta

8

Supongo que o bien desea extraer el nombre de dominio o TLD parte de la cadena. Esto debería hacer el trabajo:

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

No estoy seguro de por qué se vota, el código tld es incorrecto. Supongo que querías decir: var tld = domain.Substring (domain.IndexOf ('.')); // .com – RedFilter

+0

Supongo que var tld = domain.Substring (domain.IndexOf ('.')) se entiende (editado, espero que no te importe Noldorin)? –

+0

@OrbMan: ¡Eres un juez terriblemente duro! Claramente fue solo un error tipográfico, que podrías haber arreglado tú mismo. Supongo que el voto negativo vino de usted. : P – Noldorin

1

bien si se puede asumir que el espacio es separador su tan fácil como

cadena completa

char [] = {delimiterChars ''}; // usado para que pueda especificar más delims string [] words = full.Split (delimiterChars, 1); // divide sólo una palabra con el espacio

cadena resultado = palabras [0] // esto es cómo se puede acceder a él

1

Suponiendo que desea que el dominio de nivel superior:

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

de salida:

.com 

Esto tiene en cuenta los subdominios.

3

idea alternativo

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

Esto solo funciona si el TLD es .com. Teniendo en cuenta que el objetivo es averiguar realmente qué es el tld, parece extraño. – Brian

+0

@Brian: aunque estoy de acuerdo en que el código no es la solución correcta, selecciona un TLD de tres letras (como .net o .org). Sin embargo, perderá cualquier otro TLD (como .de o .info). –

1

Si por el extracto de te refieres a quitar, se puede utilizar el método Replace

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

0

utilizando expresiones regulares sería la mejor opción, pero si usted desea utilizar Dividir entonces

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

sé que pedirá sobre el uso del método de Split pero no estoy seguro de que es la mejor ruta. La división de una cadena asignará al menos 5 cadenas nuevas que se ignoran inmediatamente y luego tendrán que esperar hasta que se libere el GC. Es mejor que solo uses la indexación en la cadena y saques lo que necesitas.

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

no puedo pensar en una razón en el mundo que se desea utilizar String.Split para este propósito. Este problema se resuelve mejor con una expresión regular.

Aquí es un pequeño programa que muestra cómo hacerlo:

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 - ¿hay alguna razón por la cual esto fue downvoted (que no sea el hecho de que yo no use String.Split)? –

+0

No he votado negativamente, pero su tono puede tener algo que ver con eso. El hecho de que no puedas pensar en una razón no significa que no haya una. –

+0

Hmm, buen punto - Sueno como un idiota :) Gracias por señalar eso. –