代码之家  ›  专栏  ›  技术社区  ›  Doug

删除文件名中第一个“_”后的所有字符

  •  0
  • Doug  · 技术社区  · 17 年前

    北极星_sc09.xls

    我们的场景:经理们正在将这些文件上传到我们的内联网网络服务器,以便下载/查看等。我使用的是Brettles NeatUpload,对于每个上传的文件,我都会将文件属性写入PO表(sql 2000)。文件名的第一部分将作为VendorID写入数据库。

    6 回复  |  直到 17 年前
        1
  •  5
  •   Babak Naffas    17 年前
    String s = "INCOLOR_fc06_NEW.pdf";
    int index = s.IndexOf("_");
    
    return index >= 0 ? s.Substring(0,index) : s;
    
        2
  •  2
  •   Philippe Leybaert    17 年前

    我可能会冒犯反正则表达式游说团体,但我在这里(回避):

    string stripped = Regex.Replace(filename, @"(?<=[^_]*)_.*",String.Empty);
    

    '_' '_' 在字符串中(然后它将只返回原始字符串)。

    这是一行代码。它比更复杂的IndexOf()算法慢,但当用于代码的非性能敏感部分时,这是一个很好的解决方案。

    把你的喷火器拿出来。..

        3
  •  0
  •   Yvo    17 年前

    http://msdn.microsoft.com/en-us/library/system.string.trimend.aspx

    Bnaffas代码(稍作调整):

    String fileName = "INCOLOR_fc06_NEW.pdf";
    int index = fileName.IndexOf("_");
    
    return index >= 0 ? fileName.Substring(0, index) : fileName;
    

    如果你想对其他部分做点什么,你可以使用Split

    string fileName = "INCOLOR_fc06_NEW.pdf";
    string[] parts = fileName.Split('_');
    
        4
  •  0
  •   Kelsey    17 年前
    public string StripOffStuff(string sInput)
    {
      int iIndex = sInput.IndexOf("_");
    
      return (iIndex > 0) ? sInput.Substring(0, iIndex) : sInput;
    }
    
    // Call it like:
    string sNewString = StripOffStuff("INCOLOR_fc06_NEW.pdf");
    
        5
  •  0
  •   Ahmad Mageed    17 年前

    我会选择SubString方法,但为了完善现有的解决方案,这里有一个LINQ方法只是为了好玩:

    string filename = "INCOLOR_fc06_NEW.pdf";
    string result = new string(filename.TakeWhile(c => c != '_').ToArray());
    

        6
  •  0
  •   Sean    17 年前

    为了配合所有“替代”解决方案,这是我想到的第二个(在子字符串之后):

    string filename = "INCOLOR_fc06_NEW.pdf";
    string stripped = filename.Split('_')[0];