मैं दिए गए स्ट्रिंग में पहली घटना को बदलना चाहता हूं।
मैं इसे .NET में कैसे पूरा कर सकता हूं?
मैं दिए गए स्ट्रिंग में पहली घटना को बदलना चाहता हूं।
मैं इसे .NET में कैसे पूरा कर सकता हूं?
जवाबों:
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 (स्ट्रिंग, स्ट्रिंग, Int32) भी है, जो ऐसा कर सकता है, लेकिन शायद रनटाइम पर अधिक महंगा है, क्योंकि यह एक पूर्ण विशेषताओं वाले पार्सर का उपयोग कर रहा है जहां मेरी विधि एक खोज और तीन स्ट्रिंग है concatenations।
EDIT2 : यदि यह एक सामान्य कार्य है, तो आप विधि को विस्तार विधि बनाना चाहते हैं:
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")
गलत तरीके से "इफ" के बजाय "अगर" लौटाता है। अधिक जानकारी के लिए यह प्रश्न देखें ।
String.IndexOf is culture specific.
। को अद्यतन करने के लिए और अधिक मजबूत int pos = text.IndexOf(search, StringComparison.Ordinal);
।
के रूप में itsmatt कहा Regex.Replace इस के लिए एक अच्छा विकल्प है लेकिन उसके जवाब और अधिक संपूर्ण बनाने के लिए है मैं एक कोड नमूने के साथ में भरने जाएगा:
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 पर सेट है, रेगेक्स पैटर्न की घटनाओं की संख्या है जिसे आप स्ट्रिंग की शुरुआत से इनपुट स्ट्रिंग में बदलना चाहते हैं।
मैं उम्मीद कर रहा था कि यह एक स्थिर Regex.Replace अधिभार के साथ किया जा सकता है लेकिन दुर्भाग्य से यह प्रतीत होता है कि आपको इसे पूरा करने के लिए एक Regex उदाहरण की आवश्यकता है।
"foo"
, लेकिन आप new Regex(Regex.Escape("foo"))
आलंकारिक के लिए चाहते हैं "foo"
।
Regex.Replace पर एक नज़र डालें ।
"पहले केवल" को ध्यान में रखते हुए, शायद:
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)
C # एक्सटेंशन विधि जो यह करेगी:
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);
}
}
का आनंद लें
C # सिंटैक्स में:
int loc = original.IndexOf(oldValue);
if( loc < 0 ) {
return original;
}
return original.Remove(loc, oldValue.Length).Insert(loc, newValue);
और क्योंकि वहाँ भी विचार करने के लिए VB.NET है, मैं पेशकश करना चाहते हैं:
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"
यह उदाहरण सब्सट्रिंग्स को दूर करता है (लेकिन धीमा है), लेकिन शायद एक RegEx की तुलना में बहुत तेज़ है:
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;
}