স্ট্রিং। প্রতিস্থাপনের ক্ষেত্রে প্রতিস্থাপন করুন


214

আমার কাছে "হ্যালো ওয়ার্ল্ড" নামে একটি স্ট্রিং রয়েছে

আমাকে "ওয়ার্ল্ড" শব্দটি "সিশার্প" এ প্রতিস্থাপন করতে হবে

এই জন্য আমি ব্যবহার:

string.Replace("World", "csharp");

তবে ফলস্বরূপ, আমি স্ট্রিং প্রতিস্থাপন করব না। কারণ ক্ষেত্রে সংবেদনশীলতা। মূল স্ট্রিংটিতে "ওয়ার্ল্ড" রয়েছে যেখানে আমি "ওয়ার্ল্ড" প্রতিস্থাপন করার চেষ্টা করছি।

স্ট্রিংয়ে এই ক্ষেত্রে সংবেদনশীলতা এড়াতে কোনও উপায় আছে? প্রতিস্থাপন পদ্ধতি?



উত্তর:


309

আপনি একটি রেজেক্স ব্যবহার করতে পারেন এবং সংবেদনশীল প্রতিস্থাপনের ক্ষেত্রে একটি কেস সম্পাদন করতে পারেন :

class Program
{
    static void Main()
    {
        string input = "hello WoRlD";
        string result = 
           Regex.Replace(input, "world", "csharp", RegexOptions.IgnoreCase);
        Console.WriteLine(result); // prints "hello csharp"
    }
}

19
রেজেক্স ভাষার উপাদানগুলির সাথে কাজ করে না , তাই এটি সর্বজনীন পদ্ধতি নয়। স্টিভ বি এর উত্তর সঠিক।
AsValeO

1
সুতরাং আপনি আরও ভাল লিখবেন না hello. world?বা অন্য কিছু যাবেন না রেজেক্স অপারেটরগুলি।
সেবাস্তিয়ান মাচ

কেবলমাত্র যদি কেউ আরও পড়তে আগ্রহী না হয় তবে এটি ছিল ২০১১ সালে গৃহীত উত্তর এবং বিপুল সংখ্যক ভোট রয়েছে। আপনার যদি কেবলমাত্র বর্ণমালা প্রতিস্থাপন করতে হয় তবে এটি কাজ করে works তবে, আপনাকে যদি কোনও বিরামচিহ্নগুলি প্রতিস্থাপন করতে হয় তবে আপনি বড় সমস্যায় পড়তে পারেন। ওলেগ Zarevennyi এর উত্তর উচ্চতর, কিন্তু ভোট শুধুমাত্র অল্প সংখ্যক হয়েছে কারন এটিতে 2017. পোস্ট করা হয়েছে
টনি Pulokas

115
var search = "world";
var replacement = "csharp";
string result = Regex.Replace(
    stringToLookInto,
    Regex.Escape(search), 
    replacement.Replace("$","$$"), 
    RegexOptions.IgnoreCase
);

Regex.Escape আপনি ব্যবহারকারীর ইনপুট উপর নির্ভর দরকারী যা ধারণ করে করতে পারেন Regex ভাষা উপাদান

হালনাগাদ

মন্তব্যে ধন্যবাদ, আপনাকে আসলে প্রতিস্থাপনের স্ট্রিং থেকে বাঁচতে হবে না।

এখানে একটি ছোট্ট ফিডল যা কোডটি পরীক্ষা করে :

using System;
using System.Text.RegularExpressions;           
public class Program
{
    public static void Main()
    {

        var tests = new[] {
            new { Input="abcdef", Search="abc", Replacement="xyz", Expected="xyzdef" },
            new { Input="ABCdef", Search="abc", Replacement="xyz", Expected="xyzdef" },
            new { Input="A*BCdef", Search="a*bc", Replacement="xyz", Expected="xyzdef" },
            new { Input="abcdef", Search="abc", Replacement="x*yz", Expected="x*yzdef" },       
            new { Input="abcdef", Search="abc", Replacement="$", Expected="$def" },
        };


        foreach(var test in tests){
            var result = ReplaceCaseInsensitive(test.Input, test.Search, test.Replacement);

            Console.WriteLine(
                "Success: {0}, Actual: {1}, {2}",
                result == test.Expected,
                result,
                test
            );

        }


    }

    private static string ReplaceCaseInsensitive(string input, string search, string replacement){
        string result = Regex.Replace(
            input,
            Regex.Escape(search), 
            replacement.Replace("$","$$"), 
            RegexOptions.IgnoreCase
        );
        return result;
    }
}

এটির ফলাফল:

Success: True, Actual: xyzdef, { Input = abcdef, Search = abc, Replacement = xyz, Expected = xyzdef } 
Success: True, Actual: xyzdef, { Input = ABCdef, Search = abc, Replacement = xyz, Expected = xyzdef }
Success: True, Actual: xyzdef, { Input = A*BCdef, Search = a*bc, Replacement = xyz, Expected = xyzdef } 
Success: True, Actual: x*yzdef, { Input = abcdef, Search = abc, Replacement = x*yz, Expected = x*yzdef} 
Success: True, Actual: $def, { Input = abcdef, Search = abc, Replacement = $, Expected = $def }

2
পরিবর্তিত প্রতিস্থাপন = "! @ # $% ^ & * ()" আপনি "পাবেন যদি এই পদ্ধতিটি ব্যর্থ হয়! @ \ # \ $% Instead ^ & * ()" পরিবর্তিত "।
কেকডার

2
দ্বিতীয়টি Regex.Escapeখারাপ, এটি ব্যাকস্ল্যাশগুলির সাথে বিশেষ অক্ষরগুলির উপসর্গ করবে। সেরা উপায়টির মতো মনে হচ্ছে .পরিবর্তন ("$", "$$"), যা দয়ালু বোবা ( স্ট্যাকওভারফ্লো . com / a / 10078353 )।
ড্যানি টুপেনি

1
@ উদ্যানি টুপেনি: আপনি ঠিক বলেছেন ... আমি সেই অনুযায়ী উত্তর আপডেট করেছি
স্টিভ বি

54

অন্যান্য নিয়মিত প্রকাশের পদ্ধতির চেয়ে 2.5X দ্রুত এবং সবচেয়ে কার্যকর পদ্ধতি:

/// <summary>
/// Returns a new string in which all occurrences of a specified string in the current instance are replaced with another 
/// specified string according the type of search to use for the specified string.
/// </summary>
/// <param name="str">The string performing the replace method.</param>
/// <param name="oldValue">The string to be replaced.</param>
/// <param name="newValue">The string replace all occurrences of <paramref name="oldValue"/>. 
/// If value is equal to <c>null</c>, than all occurrences of <paramref name="oldValue"/> will be removed from the <paramref name="str"/>.</param>
/// <param name="comparisonType">One of the enumeration values that specifies the rules for the search.</param>
/// <returns>A string that is equivalent to the current string except that all instances of <paramref name="oldValue"/> are replaced with <paramref name="newValue"/>. 
/// If <paramref name="oldValue"/> is not found in the current instance, the method returns the current instance unchanged.</returns>
[DebuggerStepThrough]
public static string Replace(this string str,
    string oldValue, string @newValue,
    StringComparison comparisonType)
{

    // Check inputs.
    if (str == null)
    {
        // Same as original .NET C# string.Replace behavior.
        throw new ArgumentNullException(nameof(str));
    }
    if (str.Length == 0)
    {
        // Same as original .NET C# string.Replace behavior.
        return str;
    }
    if (oldValue == null)
    {
        // Same as original .NET C# string.Replace behavior.
        throw new ArgumentNullException(nameof(oldValue));
    }
    if (oldValue.Length == 0)
    {
        // Same as original .NET C# string.Replace behavior.
        throw new ArgumentException("String cannot be of zero length.");
    }


    //if (oldValue.Equals(newValue, comparisonType))
    //{
    //This condition has no sense
    //It will prevent method from replacesing: "Example", "ExAmPlE", "EXAMPLE" to "example"
    //return str;
    //}



    // Prepare string builder for storing the processed string.
    // Note: StringBuilder has a better performance than String by 30-40%.
    StringBuilder resultStringBuilder = new StringBuilder(str.Length);



    // Analyze the replacement: replace or remove.
    bool isReplacementNullOrEmpty = string.IsNullOrEmpty(@newValue);



    // Replace all values.
    const int valueNotFound = -1;
    int foundAt;
    int startSearchFromIndex = 0;
    while ((foundAt = str.IndexOf(oldValue, startSearchFromIndex, comparisonType)) != valueNotFound)
    {

        // Append all characters until the found replacement.
        int @charsUntilReplacment = foundAt - startSearchFromIndex;
        bool isNothingToAppend = @charsUntilReplacment == 0;
        if (!isNothingToAppend)
        {
            resultStringBuilder.Append(str, startSearchFromIndex, @charsUntilReplacment);
        }



        // Process the replacement.
        if (!isReplacementNullOrEmpty)
        {
            resultStringBuilder.Append(@newValue);
        }


        // Prepare start index for the next search.
        // This needed to prevent infinite loop, otherwise method always start search 
        // from the start of the string. For example: if an oldValue == "EXAMPLE", newValue == "example"
        // and comparisonType == "any ignore case" will conquer to replacing:
        // "EXAMPLE" to "example" to "example" to "example" … infinite loop.
        startSearchFromIndex = foundAt + oldValue.Length;
        if (startSearchFromIndex == str.Length)
        {
            // It is end of the input string: no more space for the next search.
            // The input string ends with a value that has already been replaced. 
            // Therefore, the string builder with the result is complete and no further action is required.
            return resultStringBuilder.ToString();
        }
    }


    // Append the last part to the result.
    int @charsUntilStringEnd = str.Length - startSearchFromIndex;
    resultStringBuilder.Append(str, startSearchFromIndex, @charsUntilStringEnd);


    return resultStringBuilder.ToString();

}

দ্রষ্টব্য: কেস == এর StringComparison.OrdinalIgnoreCaseপরামিতি হিসাবে উপেক্ষা করুনStringComparison comparisonType । এটি সমস্ত মানকে প্রতিস্থাপনের জন্য দ্রুততম, কেস-সংবেদনশীল উপায়।


এই পদ্ধতির সুবিধা:

  • উচ্চ সিপিইউ এবং স্মৃতি দক্ষতা;
  • এটি দ্রুততম সমাধান, নিয়মিত অভিব্যক্তি (শেষ প্রমাণ) সহ অন্যান্য পদ্ধতির তুলনায় 2.5 গুণ দ্রুত;
  • ইনপুট স্ট্রিং (সেট newValueকরা null) থেকে অংশগুলি অপসারণের জন্য উপযুক্ত , এটির জন্য অনুকূলিত;
  • মূল হিসাবে একই। নেট সি # string.Replace আচরণ, একই ব্যতিক্রম;
  • ভাল মন্তব্য, বুঝতে সহজ;
  • সহজ - নিয়মিত প্রকাশ নেই। নিয়মিত প্রকাশগুলি তাদের বহুমুখিতা (এমনকি সংকলিত) কারণে সর্বদা ধীর হয়;
  • এই পদ্ধতিটি ভালভাবে পরীক্ষা করা হয়েছে এবং অন্যের সমাধানগুলিতে অসীম লুপের মতো কোনও গোপন ত্রুটি নেই, এমনকি উচ্চতর রেট দেওয়া:

@ এসভালোও: রেগেক্স ভাষার উপাদানগুলির সাথে কাজ করে না, তাই এটি সর্বজনীন পদ্ধতি নয়

@ মাইক স্টিলিওন: এই কোডটি নিয়ে একটি সমস্যা আছে। যদি নতুনতে লেখাটি পুরাতন পাঠ্যের সুপারসেট হয় তবে এটি একটি অন্তহীন লুপ তৈরি করতে পারে।


বেঞ্চমার্ক-প্রুফ : এই সলিউশনটি স্টিভ বি, কোড থেকে রেগেক্সের চেয়ে 2.59X গুন দ্রুত:

// Results:
// 1/2. Regular expression solution: 4486 milliseconds
// 2/2. Current solution: 1727 milliseconds — 2.59X times FASTER! than regex!

// Notes: the test was started 5 times, the result is an average; release build.

const int benchmarkIterations = 1000000;
const string sourceString = "aaaaddsdsdsdsdsd";
const string oldValue = "D";
const string newValue = "Fod";
long totalLenght = 0;

Stopwatch regexStopwatch = Stopwatch.StartNew();
string tempString1;
for (int i = 0; i < benchmarkIterations; i++)
{
    tempString1 = sourceString;
    tempString1 = ReplaceCaseInsensitive(tempString1, oldValue, newValue);

    totalLenght = totalLenght + tempString1.Length;
}
regexStopwatch.Stop();



Stopwatch currentSolutionStopwatch = Stopwatch.StartNew();
string tempString2;
for (int i = 0; i < benchmarkIterations; i++)
{
    tempString2 = sourceString;
    tempString2 = tempString2.Replace(oldValue, newValue,
        StringComparison.OrdinalIgnoreCase);

    totalLenght = totalLenght + tempString2.Length;
}
currentSolutionStopwatch.Stop();

আসল ধারণা - @ ডারকি 711; ধন্যবাদ @ মিনারআর এর জন্য StringBuilder


5
আমি বাজি ধরছি আপনি স্ট্রিংয়ের পরিবর্তে স্ট্রিংবিল্ডার ব্যবহার করে এটি আরও দ্রুত তৈরি করতে পারেন।
খনি 21

1
@ মাইনআর আপনি ঠিক বলেছেন, আমি অসীম লুপ ছাড়াই মূলত @ ডারকি 711 সমাধানটি আপডেট করেছি, তাই আমি এটি ব্যবহার করেছি String। যাইহোক, এটি এর চেয়ে 30-40%StringBuilder দ্বারা সত্যিই দ্রুত । আমি সমাধান আপডেট করেছি। ধন্যবাদ;)String
ওলেগ জেরেভেনেই

2
আকর্ষণীয় পদ্ধতির। সম্ভবত পারফরম্যান্সের ক্ষেত্রে গুরুত্বপূর্ণ (আমার চেয়ে ভাল :))। সাধারণত একটি সাধারণ শেয়ার্ড কোড লাইব্রেরিতে যুক্ত করার পদ্ধতি।
স্টিভ বি

2
'নেমফ' এক্সপ্রেশনগুলির ব্যবহার কেবল এটি সি # 6.0 এবং এর বাইরেও বৈধ করে তোলে। আপনি যদি ভিএস ২০১৩ এ থাকেন তবে ব্যতিক্রমগুলিতে অপারেশনগুলি মুছলে আপনি এটি ব্যবহার করতে পারেন।
ল্যাঙ্কপ্যাড

"// if (oldValue.Equals (newValue, তুলনা টাইপ))" এর বাইরে মন্তব্য করার জন্য "স্ট্রিংকম্পিয়ারের সাথে তুলনা টাইপটি প্রতিস্থাপন করুন rdআরডিনাল?
রজার উইলককস

31

এক্সটেনশনগুলি আমাদের জীবনকে আরও সহজ করে তোলে:

static public class StringExtensions
{
    static public string ReplaceInsensitive(this string str, string from, string to)
    {
        str = Regex.Replace(str, from, to, RegexOptions.IgnoreCase);
        return str;
    }
}

10
এবং পালিয়ে যাওয়া আমাদের জীবনকে কম বগি করে তোলে :-) রিগেক্স রিপ্লেস (ইনপুট, রিজেক্স.এস্কেপ (অনুসন্ধান), প্রতিস্থাপন।
ভিমান

29

Regex ব্যবহার করে প্রচুর পরামর্শ। এটি ছাড়াই এই এক্সটেনশন পদ্ধতি সম্পর্কে কীভাবে:

public static string Replace(this string str, string old, string @new, StringComparison comparison)
{
    @new = @new ?? "";
    if (string.IsNullOrEmpty(str) || string.IsNullOrEmpty(old) || old.Equals(@new, comparison))
        return str;
    int foundAt = 0;
    while ((foundAt = str.IndexOf(old, foundAt, comparison)) != -1)
    {
        str = str.Remove(foundAt, old.Length).Insert(foundAt, @new);
        foundAt += @new.Length;
    }
    return str;
}

নোট করুন যে তুলনা যুক্তিটি আসল প্রতিস্থাপনটি করতে ব্যবহৃত হচ্ছে না (এটি সর্বদা সংবেদনশীল হয়)
বলো

2
এই কোডটি নিয়ে একটি সমস্যা আছে। পাঠ্য তাহলে নতুন এ লেখার একটা সুপারসেটও হয় পুরাতন , এই একটি অবিরাম লুপ তৈরী করতে পারে। একবার নতুন এ ঢোকানো হয় FoundAt , মান FoundAt দৈর্ঘ্য এগিয়ে করা প্রয়োজন নতুন
মাইক স্থিরতা

comparisonএর IndexOfপরিবর্তে প্যারামিটারটি ব্যবহার করা উচিতStringComparison.CurrentCultureIgnoreCase
ম্যাক্সেন্স

@ বলো আমি তুলনা যুক্তিটি ব্যবহার করতে এটি সম্পাদনা করেছি (পিয়ার পর্যালোচনা হতে কিছুটা সময় নিতে পারে)।
ব্র্যাডলিস

2
নতুন স্ট্রিং ফিরিয়ে দেওয়ার জন্য আমি এই শর্তটিও পৃথক করতাম: if(old.Equals(@new, comparison)) return @new;যেহেতু নতুন স্ট্রিং বড় হাতের / ছোট হাতের ক্ষেত্রে পৃথক হতে পারে।
সুনুন ןɐ কিউপি

13

আপনি এই সহায়িকার ফাংশনটি খুঁজে পেতে মাইক্রোসফ্ট.ভিজুয়ালবাসিক নেমস্পেস ব্যবহার করতে পারেন :

Replace(sourceString, "replacethis", "withthis", , , CompareMethod.Text)

আমি উত্তর না দেওয়া পর্যন্ত আমার উত্তর নিয়ে গর্বিত ছিলাম যা এটি আরও ভাল উত্তর কারণ এটি অন্তর্নির্মিত Ex zeSzInG123 "
বোলো

সতর্কতা, স্ট্রিংস.পরিবর্তিত স্থানটি খালি স্ট্রিং হলে প্রতিস্থাপনটি শূন্য দেয়।
মাফু জোশ

1
। নেট 4.7.2 এ আপনাকে কাজ করার জন্য মাইক্রোসফ্ট.ভিউজুয়াল বেসিকের একটি রেফারেন্স যুক্ত করতে হবে। নেট কোরটিতে মাইক্রোসফ্ট.ভিউজুয়ালবাসিক.সার্টিংস ক্লাস (যেভাবেই 10.3.0 সংস্করণে) প্রতিস্থাপন ফাংশনটি প্রয়োগ করার জন্য উপস্থিত হয় না। এটি পাওয়ারশেলের ক্ষেত্রেও কাজ করে যদি আপনি অ্যাড-ক্লাস -অ্যাসোপেনশন মাইক্রোসফ্ট.ভিউজুয়াল বেসিক প্রথমত যুক্ত করেন।
অধ্যাপক ভন লেমনগারগেল

6

( সম্পাদিত: 'নগ্ন লিঙ্ক' সমস্যা সম্পর্কে সচেতন ছিল না, এর জন্য দুঃখিত)

এখান থেকে নেওয়া :

string myString = "find Me and replace ME";
string strReplace = "me";
myString = Regex.Replace(myString, "me", strReplace, RegexOptions.IgnoreCase);

মনে হচ্ছে আপনি কেস সংবেদনশীল স্ট্রিংয়ের অভাবের অভিযোগ করার জন্য প্রথম নন ep প্রতিস্থাপন।


5

তুলনামূলকভাবে পাসের জন্য পাসওয়ার্ড ব্যবহার করার জন্য @ ডারকি 711 এর উত্তর পরিবর্তিত হয়েছে এবং ফ্রেমওয়ার্কটি মিলিয়ে নামকরণ এবং এক্সএমএল মন্তব্যগুলিকে যথাসম্ভব ঘনিষ্ঠভাবে প্রতিস্থাপন করুন।

/// <summary>
/// Returns a new string in which all occurrences of a specified string in the current instance are replaced with another specified string.
/// </summary>
/// <param name="str">The string performing the replace method.</param>
/// <param name="oldValue">The string to be replaced.</param>
/// <param name="newValue">The string replace all occurrances of oldValue.</param>
/// <param name="comparisonType">Type of the comparison.</param>
/// <returns></returns>
public static string Replace(this string str, string oldValue, string @newValue, StringComparison comparisonType)
{
    @newValue = @newValue ?? string.Empty;
    if (string.IsNullOrEmpty(str) || string.IsNullOrEmpty(oldValue) || oldValue.Equals(@newValue, comparisonType))
    {
        return str;
    }
    int foundAt;
    while ((foundAt = str.IndexOf(oldValue, 0, comparisonType)) != -1)
    {
        str = str.Remove(foundAt, oldValue.Length).Insert(foundAt, @newValue);
    }
    return str;
}

2

আমি এক্সটেনশন পদ্ধতি লিখেছি:

public static string ReplaceIgnoreCase(this string source, string oldVale, string newVale)
    {
        if (source.IsNullOrEmpty() || oldVale.IsNullOrEmpty())
            return source;

        var stringBuilder = new StringBuilder();
        string result = source;

        int index = result.IndexOf(oldVale, StringComparison.InvariantCultureIgnoreCase);

        while (index >= 0)
        {
            if (index > 0)
                stringBuilder.Append(result.Substring(0, index));

            if (newVale.IsNullOrEmpty().IsNot())
                stringBuilder.Append(newVale);

            stringBuilder.Append(result.Substring(index + oldVale.Length));

            result = stringBuilder.ToString();

            index = result.IndexOf(oldVale, StringComparison.InvariantCultureIgnoreCase);
        }

        return result;
    }

আমি পূর্ববর্তী এক্সটেনশন পদ্ধতির জন্য দুটি অতিরিক্ত এক্সটেনশন পদ্ধতি ব্যবহার করি:

    public static bool IsNullOrEmpty(this string value)
    {
        return string.IsNullOrEmpty(value);
    }

    public static bool IsNot(this bool val)
    {
        return val == false;
    }

2
সম্মত। কিন্তু IsNotখুব গুরুত্বের সাথে :) এক্সটেনশন নিচ্ছে
nawfal

হতাশাজনক, এটি সমস্ত পরিস্থিতিতে কাজ করে না। আমি একটি বিশিষ্ট নামটি দিয়ে যাচ্ছিলাম এবং স্ট্রিংটি মিলিয়ন অক্ষর দীর্ঘ না হওয়া পর্যন্ত এবং তারপরে স্মৃতিশক্তি শেষ না হওয়া পর্যন্ত এটি সংযোজিত হবে
বিবিবি

তার নীচে বিকল্প প্রস্তাব দেওয়া হয়েছে যা আমার সমস্যা স্থির করেছে
বিবিবি

আমি সত্যিই পছন্দ করি.IsNot
ttugates

1

অনুসন্ধানের স্ট্রিংয়ের সাথে পেট্রসিওর উত্তর প্রসারিত করা Regex.Escape, এবং স্টিভ বি'র উত্তরে (এবং আমার স্বাদে কিছুটা ছোটখাটো পরিবর্তন) প্রস্তাবিত মেলানো গ্রুপ থেকে বেরিয়ে আসা :

public static class StringExtensions
{
    public static string ReplaceIgnoreCase(this string str, string from, string to)
    {
        return Regex.Replace(str, Regex.Escape(from), to.Replace("$", "$$"), RegexOptions.IgnoreCase);
    }
}

যা নিম্নলিখিত প্রত্যাশিত ফলাফল আনবে:

Console.WriteLine("(heLLo) wOrld".ReplaceIgnoreCase("(hello) world", "Hi $1 Universe")); // Hi $1 Universe
Console.WriteLine("heLLo wOrld".ReplaceIgnoreCase("(hello) world", "Hi $1 Universe"));   // heLLo wOrld

তবে পালিয়ে যাওয়া না করেই আপনি নিম্নলিখিতগুলি পাবেন যা String.Replaceকেবল ক্ষেত্রে সংবেদনশীল না থেকে প্রত্যাশিত আচরণ নয় :

Console.WriteLine("(heLLo) wOrld".ReplaceIgnoreCase_NoEscaping("(hello) world", "Hi $1 Universe")); // (heLLo) wOrld
Console.WriteLine("heLLo wOrld".ReplaceIgnoreCase_NoEscaping("(hello) world", "Hi $1 Universe"));   // Hi heLLo Universe

1

এই কাজটি করে না: আমি অন্য যে কোনও কিছুতে দ্রুত বা সহজ হয়ে উঠতে পারি না।

public static class ExtensionMethodsString
{
    public static string Replace(this String thisString, string oldValue, string newValue, StringComparison stringComparison)
    {
        string working = thisString;
        int index = working.IndexOf(oldValue, stringComparison);
        while (index != -1)
        {
            working = working.Remove(index, oldValue.Length);
            working = working.Insert(index, newValue);
            index = index + newValue.Length;
            index = working.IndexOf(oldValue, index, stringComparison);
        }
        return working;
    }
}

আমি জানি না এটি দ্রুত কিনা তবে এটি সংক্ষিপ্ত, রেজেক্স ওভারহেড এবং সম্ভাব্য সমস্যাগুলি ব্যবহার করে না এবং অন্তর্নির্মিত স্ট্রিংকম্পারেশন ব্যবহার করে।
fvlinden

0

ফাংশনের নীচে স্ট্রিং সেট থেকে সমস্ত মিলের শব্দ (এটি) সরিয়ে ফেলা হয়। লিখেছেন রবিকান্ত সোনারে।

private static void myfun()
{
    string mystring = "thiTHISThiss This THIS THis tThishiThiss. Box";
    var regex = new Regex("this", RegexOptions.IgnoreCase);
    mystring = regex.Replace(mystring, "");
    string[] str = mystring.Split(' ');
    for (int i = 0; i < str.Length; i++)
    {
        if (regex.IsMatch(str[i].ToString()))
        {
            mystring = mystring.Replace(str[i].ToString(), string.Empty);

        }
    }
    Console.WriteLine(mystring);
}

এই ফাংশনটি স্ট্রিং সেট থেকে সমস্ত স্ট্রিংকে প্রতিস্থাপন করবে ... রবিকান্ত সোনারে লিখেছেন
রবিকান্ত সোনার

0

নীচের উদাহরণটি ব্যবহার করার সময় @ জর্জি বাতালভ সলিউশন ব্যবহার করে আমার একটি সমস্যা হয়েছিল

স্ট্রিং অরিজিনাল = "ব্লাহ, ডিসি = ব্লিহ, ডিসি = ব্লিহ, ডিসি = ব্লহ, ডিসি = কম"; স্ট্রিং প্রতিস্থাপিত = আসল.পরিবর্তনবিহীন কেস (", ডিসি =", "।")

নীচে আমি কীভাবে তার এক্সটেনশনটি আবার লিখেছি

public static string ReplaceIgnoreCase(this string source, string oldVale, 
string newVale)
    {
        if (source.IsNullOrEmpty() || oldVale.IsNullOrEmpty())
            return source;

        var stringBuilder = new StringBuilder();
        string result = source;

        int index = result.IndexOf(oldVale, StringComparison.InvariantCultureIgnoreCase);
        bool initialRun = true;

        while (index >= 0)
        {
            string substr = result.Substring(0, index);
            substr = substr + newVale;
            result = result.Remove(0, index);
            result = result.Remove(0, oldVale.Length);

            stringBuilder.Append(substr);

            index = result.IndexOf(oldVale, StringComparison.InvariantCultureIgnoreCase);
        }

        if (result.Length > 0)
        {
            stringBuilder.Append(result);
        }

        return stringBuilder.ToString();
    }

0

নীচে স্ট্রিং উপেক্ষা অক্ষর কেস প্রতিস্থাপন বিকল্প

String thisString = "hello world"; 
String replaceString = "World";

//thisString.Replace("World", "csharp"); 
//below is the alternative to replace string ignoring character case

int start = StringUtils.indexOfIgnoreCase(thisString,replaceString);
String searchKey = thisString.substring(start, start+replaceString.length());
thisString= thisString.replaceAll(searchKey ,replaceString );
System.out.println(thisString);

//prints hello World


-3

আমি এটিকে পছন্দ করি - "হ্যালো ওয়ার্ল্ড" o


1
এটি সমস্ত কিছু ছোট করে দেবে, এমনকী শব্দগুলিও যেগুলি প্রতিস্থাপনের কথা ছিল না।
জেজেজে

স্পষ্টতই, আপনি যদি মামলাটি নিয়ে বিরক্ত না হন তবেই আপনি এটি ব্যবহার করতে পারেন।
হর্ষাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.