[c#] 문자열에서 마지막 단어 바꾸기-C #

문자열에서 단어의 마지막 항목을 바꿔야하는 문제가 있습니다.

상황 : 다음 형식의 문자열이 제공됩니다.

string filePath ="F:/jan11/MFrame/Templates/feb11";

그런 다음 다음 TnaName과 같이 바꿉니다.

filePath = filePath.Replace(TnaName, ""); // feb11 is TnaName

이것은 작동하지만 때 나는 문제가 TnaName내와 동일합니다 folder name. 이런 일이 발생하면 다음과 같은 문자열을 얻게됩니다.

F:/feb11/MFrame/Templates/feb11

지금은 모두 발생 대체하고 TnaName과를 feb11. 내 문자열에서 마지막 단어 만 바꿀 수있는 방법이 있습니까?

참고 : feb11TnaName– 문제가되지 않습니다 다른 프로세스에서 유래한다.



답변

다음은 문자열의 마지막 발생을 대체하는 함수입니다.

public static string ReplaceLastOccurrence(string Source, string Find, string Replace)
{
        int place = Source.LastIndexOf(Find);

        if(place == -1)
           return Source;

        string result = Source.Remove(place, Find.Length).Insert(place, Replace);
        return result;
}
  • Source 작업을 수행 할 문자열입니다.
  • Find 바꿀 문자열입니다.
  • Replace 바꿀 문자열입니다.


답변

을 사용 string.LastIndexOf()하여 문자열의 마지막 발생 인덱스를 찾은 다음 하위 문자열을 사용하여 솔루션을 찾습니다.


답변

수동으로 교체해야합니다.

int i = filePath.LastIndexOf(TnaName);
if (i >= 0)
    filePath = filePath.Substring(0, i) + filePath.Substring(i + TnaName.Length);


답변

Regex를 사용할 수없는 이유를 모르겠습니다.

public static string RegexReplace(this string source, string pattern, string replacement)
{
  return Regex.Replace(source,pattern, replacement);
}

public static string ReplaceEnd(this string source, string value, string replacement)
{
  return RegexReplace(source, $"{value}$", replacement);
}

public static string RemoveEnd(this string source, string value)
{
  return ReplaceEnd(source, value, string.Empty);
}

용법:

string filePath ="F:/feb11/MFrame/Templates/feb11";
filePath = filePath.RemoveEnd("feb11"); // F:/feb11/MFrame/Templates/
filePath = filePath.ReplaceEnd("feb11","jan11"); // F:/feb11/MFrame/Templates/jan11


답변

네임 스페이스 의 Path클래스를 사용할 수 있습니다 System.IO.

string filePath = "F:/jan11/MFrame/Templates/feb11";

Console.WriteLine(System.IO.Path.GetDirectoryName(filePath));


답변

솔루션은 한 줄로 훨씬 더 간단하게 구현할 수 있습니다.

 static string ReplaceLastOccurrence(string str, string toReplace, string replacement)
    {
        return Regex.Replace(str, $@"^(.*){toReplace}(.*?)$", $"$1{replacement}$2");
    }

이로써 우리는 정규식 별표 연산자의 탐욕을 이용합니다. 이 함수는 다음과 같이 사용됩니다.

var s = "F:/feb11/MFrame/Templates/feb11";
var tnaName = "feb11";
var r = ReplaceLastOccurrence(s,tnaName, string.Empty);


답변

var lastIndex = filePath.LastIndexOf(TnaName);

filePath = filePath.Substring(0, lastIndex);