سؤال

ولدي سلسلة = "google.com 220 USD 19H 3D".

وأريد أن استخراج فقط "كوم" جزء .......

وماذا يكون أسهل طريقة للتلاعب في طريقة سلسلة تقسيم للحصول على هذه النتيجة؟

هل كانت مفيدة؟

المحلول

وانا التخمين كنت تريد إما لاستخراج اسم المجال أو TLD جزء من خيط. هذا ينبغي القيام بهذه المهمة:

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

نصائح أخرى

وفكرة بديلة

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

وكذلك إذا كنت يمكن أن نفترض أن الفضاء هو المفرق من السهل كما

وسلسلة كاملة

وشار [] delimiterChars = { ''}؛ // المستخدمة بحيث يمكنك تحديد أكثر delims سلسلة [] الكلمات = full.Split (delimiterChars، 1)؛ // يقسم كلمة واحدة فقط مع الفضاء

ونتيجة سلسلة = عبارة [0] // هذا هو كيف يمكنك الوصول إليه

وإذا كان عن طريق استخراج تقصد إزالة، يمكنك استخدام الأسلوب استبدال

ونتيجة فار = str.Replace ( "" "كوم.")؛

وأنا أعلم أنك سألت حول استخدام أسلوب تقسيم لكنني لست متأكدا من أن هذا هو أفضل طريق. تقسيم وسلسلة تخصص لا يقل عن 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 );

وعلى افتراض انك تريد نطاق المستوى الأعلى:

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

وإخراج:

.com

وهذا يأخذ في الاعتبار النطاقات الفرعية.

واستخدام التعبيرات المنتظمة سيكون الخيار الأفضل ولكن إذا كنت ترغب في استخدام سبليت ثم

  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));

وأنا لا أستطيع التفكير في السبب في العالم ان كنت تريد استخدام 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);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top