2009-06-23 2 views
5

У меня есть строка = "google.com 220 USD 3d 19h".C# string split

Я хочу, чтобы извлечь только «.com» часть .......

Что самый простой способ манипулировать метод раскола строки, чтобы получить этот результат?

+11

строки извлеченной = ".com" ;. Это самый простой способ, и вам даже не нужно использовать string.split! :-) –

+1

Недостаточно подробностей - если вы приводите дополнительные примеры строк и что вам нужно извлечь, можно разработать хорошее общее решение. – Oded

+0

Рассмотрите возможность использования регулярного выражения. –

ответ

8

Я предполагаю, что вы либо хотите извлечь доменное имя, либо часть строки TLD. Это должно сделать работу:

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

Не знаете, почему это проголосовали, код tld неверен. Я предполагаю, что вы имели в виду это сказать: var tld = domain.Substring (domain.IndexOf ('.')); // .com – RedFilter

+0

Я предполагаю, что var tld = domain.Substring (domain.IndexOf ('.')) имел в виду (отредактировал его, надеюсь, что вы не против Нолдорина)? –

+0

@OrbMan: Ты ужасно суровый судья! Это была просто опечатка, которую вы могли бы исправить. Я предполагаю, что голосом пришло от вас. : P – Noldorin

1

хорошо, если можно предположить, что пространство Seperator его так же легко, как

строки полного

символьных [] delimiterChars = { ''}; // используется так, что вы можете указать больше delims string [] words = full.Split (delimiterChars, 1); // разбивает только одно слово с пространством

строка результат = слова [0] // это, как вы можете получить доступ к нему

1

Если вы хотите получить домен верхнего уровня:

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

Выход:

.com 

Это учитывает поддомены.

3

Альтернативные идеи

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

Это работает только в том случае, если TLD является .com. Учитывая, что дело в том, чтобы действительно узнать, что такое tld, это кажется странным. – Brian

+0

@Brian: хотя я согласен с тем, что код не является правильным решением, он выбирает любой трехбуквенный TLD (например .net или .org). Однако он пропустит любой другой TLD (например, .de или .info). –

1

Если вытяжкой вы имеете в виду удалить, вы можете использовать метод Replace

уаг результат = str.replace ("" "ком.");

0

с помощью Regex будет лучшим вариантом, но если вы хотите использовать Split затем

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

Я знаю, что вы спросили об использовании Split метод, но я не уверен, что это лучший путь. Разделение строки будет выделять не менее 5 новых строк, которые будут немедленно проигнорированы, а затем придется ждать, пока не будет выпущен GC. Вам лучше просто использовать индексирование в строку и вытащить именно то, что вам нужно.

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

Я не могу думать о причине в мире, который вы хотели бы использовать String.Split для этой цели. Эту проблему лучше всего решить с помощью регулярного выражения.

Вот небольшая программа, которая показывает, как это сделать:

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 - есть причина, почему это было приостановлено (кроме того, что я не использовал String.Split)? –

+0

Я не спускал вниз, но ваш тон может иметь к этому какое-то отношение. Просто потому, что вы не можете думать о причине, это не значит, что ее нет. –

+0

Хм, хороший момент. Я действительно выгляжу как придурок :) Спасибо, что указали это. –