سؤال

لقد كتبت طريقة تمديد لمعالجة السلسلة.أنا في حيرة من أمري ماذا يجب أن أسميها - لأن هذا سيصبح جزءًا من المكتبة الأساسية التي سيستخدمها مطورو الواجهة الأمامية في الفريق.وهنا الملف الشخصي لعضو الفصل.

معلومات: طريقة ملحق الأداة المساعدة لأنواع السلسلة.التحميل الزائد لهذه الطريقة قد يفعل نفس الشيء مع الأحرف بخلاف المسافة [مع ما تم توفيره في الوسيطة]
غاية: يقوم بتشذيب كافة المسافات المتوسطة أو البينية إلى مساحة واحدة.
السابق:

string Input = "Hello      Token1    Token2     Token3    World!  ";
string Output = Input.TrimSpacesInBetween();
//Output will be: "Hello Token1 Token2 Token3 World!"

لقد قرأت [في الواقع أنا أقرأ] إرشادات تصميم الإطار ولكن يبدو أن هذا يزعجني.

بعض الخيارات أعتقد ..

TrimIntermediate();  
TrimInbetween();

إليك الكود عند الطلب:

انها عودية..

public static class StringExtensions
{
    public static string Collapse(this string str)
    {
        return str.Collapse(' ');
    }

    public static string Collapse(this string str, char delimeter)
    {
        char[] delimeterts = new char[1];
        delimeterts[0] = delimeter;
        str = str.Trim(delimeterts);

        int indexOfFirstDelimeter = str.IndexOf(delimeter);
        int indexTracker = indexOfFirstDelimeter + 1;

        while (str[indexTracker] == delimeter)
            indexTracker++;

        str = str.Remove(indexOfFirstDelimeter + 1, indexTracker - indexOfFirstDelimeter - 1);
        string prevStr = str.Substring(0, indexOfFirstDelimeter + 1);
        string nextPart = str.Substring(indexOfFirstDelimeter + 1);

        if (indexOfFirstDelimeter != -1)
            nextPart = str.Substring(indexOfFirstDelimeter + 1).Collapse(delimeter);

        string retStr = prevStr + nextPart;

        return retStr;
    }
}
هل كانت مفيدة؟

المحلول

ماذا عن CollapseSpaces?

نصائح أخرى

CollapseSpaces يعد مفيدًا للمساحات فقط، ولكنه يسمح بالأحمال الزائدة التي قد ترغب فيها CollapseDelimiters أو CollapseWhitespace إذا كان الأمر مخصصًا لأحرف المسافات البيضاء المختلفة.

ليست إجابة حقًا، بل مزيد من التعليقات على الكود المنشور...

يمكنك جعل الطريقة أقصر بكثير وأكثر قابلية للفهم باستخدام تعبير عادي.(أعتقد أنه من المحتمل أن يكون أداؤها أفضل من معالجات السلسلة العودية أيضًا، ولكنك ستحتاج إلى قياس الأداء لمعرفة ذلك بالتأكيد.)

public static class StringExtensions
{
    public static string Collapse(this string str)
    {
        return str.Collapse(' ');
    }

    public static string Collapse(this string str, char delimiter)
    {
        str = str.Trim(delimiter);

        string delim = delimiter.ToString();
        return Regex.Replace(str, Regex.Escape(delim) + "{2,}", delim);
    }
}

في روبي أعتقد أنهم يسمون هذا squeeze

تطبيع المسافة البيضاء؟بهذه الطريقة يكون من الواضح أنه ستكون هناك قيمة قابلة للاستخدام متبقية بعد المعالجة.كما ذكر آخرون سابقًا، يبدو الأمر "Collapse" صارمًا إلى حد ما وقد يعني أنه يمكنه إرجاع سلسلة فارغة.

جرب هذا، فهو يناسبني ويبدو أنه أقل تعقيدًا بكثير من الحل العودي ...

public static class StringExtensions
{
    public static string NormalizeWhitespace(this string input, char delim)
    {
        return System.Text.RegularExpressions.Regex.Replace(input.Trim(delim), "["+delim+"]{2,}", delim.ToString());
    }
}

ويمكن تسميتها على هذا النحو:

Console.WriteLine(input.NormalizeWhitespace(' '));

CollapseExtraWhitespace

PaulaIsBrilliant بالطبع!

كيف هو makeCompact?

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top