주어진 문자열에서 첫 번째 항목을 바꾸고 싶습니다.
.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 (String, String, Int32)도 동일하게 할 수 있지만 내 방법이 하나의 찾기와 세 개의 문자열을 수행하는 완전한 기능을 갖춘 파서를 활용하기 때문에 런타임에 더 비쌉니다. 연결.
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")
"if"대신 "ief"를 잘못 반환합니다. 자세한 내용은 이 질문 을 참조하십시오.
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"
.
"첫 번째"만 고려하면 다음과 같습니다.
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");
이 작업을 수행 할 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
이 예제는 하위 문자열을 추상화하지만 (느리지 만) 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;
}