আমি একটি নির্দিষ্ট স্ট্রিংয়ে প্রথম ঘটনাটি প্রতিস্থাপন করতে চাই।
আমি কিভাবে নেট থেকে এটি সম্পাদন করতে পারি?
আমি একটি নির্দিষ্ট স্ট্রিংয়ে প্রথম ঘটনাটি প্রতিস্থাপন করতে চাই।
আমি কিভাবে নেট থেকে এটি সম্পাদন করতে পারি?
উত্তর:
string ReplaceFirst(string text, string search, string replace)
{
int pos = text.IndexOf(search);
if (pos < 0)
{
return text;
}
return text.Substring(0, pos) + replace + text.Substring(pos + search.Length);
}
উদাহরণ:
string str = "The brown brown fox jumps over the lazy dog";
str = ReplaceFirst(str, "brown", "quick");
সম্পাদনা : @itsmatt হিসাবে উল্লিখিত হয়েছে , Regex.Replace (স্ট্রিং, স্ট্রিং, ইন্ট 32) রয়েছে, যা একই কাজ করতে পারে তবে রানটাইমের সময় সম্ভবত এটি আরও ব্যয়বহুল, কারণ এটি একটি সম্পূর্ণ বৈশিষ্ট্যযুক্ত পার্সার ব্যবহার করছে যেখানে আমার পদ্ধতিটি খুঁজে পায় এবং তিনটি স্ট্রিং রয়েছে concatenations।
সম্পাদনা 2 : এটি যদি একটি সাধারণ কাজ হয় তবে আপনি পদ্ধতিটিকে একটি এক্সটেনশন পদ্ধতি করতে চাইতে পারেন:
public static class StringExtension
{
public static string ReplaceFirst(this string text, string search, string replace)
{
// ...same as above...
}
}
উপরের উদাহরণ ব্যবহার করে এখন এটি লেখা সম্ভব:
str = str.ReplaceFirst("brown", "quick");
ReplaceFirst("oef", "œ", "i")
ভুলভাবে "if" এর পরিবর্তে "if" প্রদান করে। আরও তথ্যের জন্য এই প্রশ্নটি দেখুন ।
String.IndexOf is culture specific.
। আপডেট করার জন্য আরও শক্তিশালী int pos = text.IndexOf(search, StringComparison.Ordinal);
।
যেমনটি এর ম্যাটমেট বলেছে রেগেক্স। তার উত্তরটি আরও সম্পূর্ণ করার জন্য প্রতিস্থাপন এটির পক্ষে একটি ভাল পছন্দ আমি একটি কোডের নমুনা দিয়ে এটি পূরণ করব:
using System.Text.RegularExpressions;
...
Regex regex = new Regex("foo");
string result = regex.Replace("foo1 foo2 foo3 foo4", "bar", 1);
// result = "bar1 foo2 foo3 foo4"
এই ক্ষেত্রে 1 তে সেট করা তৃতীয় প্যারামিটার হ'ল স্ট্রিংয়ের শুরু থেকে ইনপুট স্ট্রিংয়ে আপনি প্রতিস্থাপন করতে চান এমন রেজেক্স প্যাটার্নের সংখ্যার সংখ্যা।
আমি আশা করছিলাম এটি একটি স্ট্যাটিক রেজেক্সের সাথে করা সম্ভব over পুনরায় ওভারলোডটি চাপ দিন তবে দুর্ভাগ্যক্রমে এটির জন্য আপনাকে একটি রেইজেক্স উদাহরণ প্রয়োজন।
"foo"
, তবে আপনি new Regex(Regex.Escape("foo"))
রূপক হিসাবে একটি চাইবেন "foo"
।
"শুধুমাত্র প্রথম" অ্যাকাউন্টে নেওয়া, সম্ভবত:
int index = input.IndexOf("AA");
if (index >= 0) output = input.Substring(0, index) + "XQ" +
input.Substring(index + 2);
?
বা আরও সাধারণভাবে:
public static string ReplaceFirstInstance(this string source,
string find, string replace)
{
int index = source.IndexOf(find);
return index < 0 ? source : source.Substring(0, index) + replace +
source.Substring(index + find.Length);
}
তারপর:
string output = input.ReplaceFirstInstance("AA", "XQ");
using System.Text.RegularExpressions;
RegEx MyRegEx = new RegEx("F");
string result = MyRegex.Replace(InputString, "R", 1);
প্রথম পাবেন F
মধ্যে InputString
এবং সঙ্গে এটি প্রতিস্থাপন R
।
result = (New Regex("F")).Replace(InputString, "R", 1)
সি # এক্সটেনশন পদ্ধতি যা এটি করবে:
public static class StringExt
{
public static string ReplaceFirstOccurrence(this string s, string oldValue, string newValue)
{
int i = s.IndexOf(oldValue);
return s.Remove(i, oldValue.Length).Insert(i, newValue);
}
}
উপভোগ করুন
সি # সিনট্যাক্সে:
int loc = original.IndexOf(oldValue);
if( loc < 0 ) {
return original;
}
return original.Remove(loc, oldValue.Length).Insert(loc, newValue);
এবং বিবেচনার জন্য ভিবি.এনইটিও রয়েছে বলে আমি প্রস্তাব দিতে চাই:
Private Function ReplaceFirst(ByVal text As String, ByVal search As String, ByVal replace As String) As String
Dim pos As Integer = text.IndexOf(search)
If pos >= 0 Then
Return text.Substring(0, pos) + replace + text.Substring(pos + search.Length)
End If
Return text
End Function
যে কারও কাছে রেফারেন্স মানায় না Microsoft.VisualBasic
, তাদের জন্য Replace
পদ্ধতিটি রয়েছে :
string result = Microsoft.VisualBasic.Strings.Replace("111", "1", "0", 2, 1); // "101"
এই উদাহরণটি সাবস্ট্রিংগুলি বিমূর্ত করে (তবে ধীরে ধীরে) তবে এটি সম্ভবত একটি রেজিএক্সের চেয়ে অনেক দ্রুত:
var parts = contents.ToString().Split(new string[] { "needle" }, 2, StringSplitOptions.None);
return parts[0] + "replacement" + parts[1];
string abc = "AAAAX1";
if(abc.IndexOf("AA") == 0)
{
abc.Remove(0, 2);
abc = "XQ" + abc;
}