1

我有一些字符串,我想用新字符串替换最后一个 .something。例如:

string replace = ".new";
blabla.test.bla.text.jpeg => blabla.test.bla.text.new
testfile_this.00001...csv => testfile_this.00001...new

所以不管.....有多少,我只想改变最后一个和最后一个之后的字符串.

我在 C# 中看到有Path.ChangeExtension但它只能与File结合使用- 有没有办法仅将它与字符串一起使用?我真的需要正则表达式吗?

4

6 回答 6

4

您可以使用string.LastIndexOf('.');

string replace = ".new"; 
string test = "blabla.test.bla.text.jpeg";
int pos = test.LastIndexOf('.');
if(pos >= 0)
    string newString = test.Substring(0, pos-1) + replace;

当然,需要进行一些检查以确保 LastIndexOf 找到最后一点。

但是,看到其他答案,让我说,虽然 Path.ChangeExtension 有效,但使用依赖于操作系统的文件处理类中的方法来操作字符串对我来说并不合适。(当然,如果这个字符串真的是一个文件名,那我的反对是无效的)

于 2012-07-25T13:26:31.563 回答
4
string replace = ".new";
string p = "blabla.test.bla.text.jpeg";
Console.WriteLine(Path.GetFileNameWithoutExtension(p) + replace);

输出:

blabla.test.bla.text.new
于 2012-07-25T13:26:53.247 回答
4

ChangeExtension应该像宣传的那样工作;

string replace = ".new";
string file = "testfile_this.00001...csv";

file = Path.ChangeExtension(file, replace);

>> testfile_this.00001...new
于 2012-07-25T13:29:40.437 回答
1
string s = "blabla.test.bla.text.jpeg";
s = s.Substring(0, s.LastIndexOf(".")) + replace;
于 2012-07-25T13:27:37.743 回答
1

不,您不需要正则表达式。只需 .LastIndexOf 和 .Substring 就足够了。

string replace = ".new";
string input = "blabla.bla.test.jpg";

string output = input.Substring(0, input.LastIndexOf('.')) + replace;
// output = "blabla.bla.test.new"
于 2012-07-25T13:28:21.287 回答
0

请使用此功能。

public string ReplaceStirng(string originalSting, string replacedString)
{
    try
    {
        List<string> subString = originalSting.Split('.').ToList();
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < subString.Count - 1; i++)
        {
            stringBuilder.Append(subString[i]);
        }
        stringBuilder.Append(replacedString);
        return stringBuilder.ToString();
    }
    catch (Exception ex)
    {
        if (log.IsErrorEnabled)
            log.Error("[" + System.DateTime.Now.ToString() + "] " + System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName + " :: " + System.Reflection.MethodBase.GetCurrentMethod().Name + " :: ", ex);
            throw;
    }
}
于 2012-07-25T13:36:37.583 回答