我试图创build一个新的string,从现有的string,例如删除某些字符
string path = "C:\test.txt"
所以string“pathminus”将取出“C:\”例如
string pathminus = "test.txt"
字符串类提供了各种方式来做到这一点。
如果您想通过删除前三个字符来将“C:\ test.txt”更改为“test.txt”:
path.Substring(3);
如果你想从字符串的任何地方删除“C:\”:
path.Replace("C:\", "");
或者如果你特别想要文件名,不管路径多长时间:
Path.GetFileName(path);
根据你的意图,有很多方法可以做到这一点。 我更喜欢使用静态类Path
。
使用Path.GetFileName
例如:
string pathminus = Path.GetFileName(path);
有很多方法可以删除字符串的某个部分。 这是几种方法来做到这一点:
var path = @"C:\test.txt"; var root = @"C:\";
使用string.Remove()
var pathWithoutRoot = path.Remove(0, root.Length); Console.WriteLine(pathWithoutRoot); // prints test.txt
使用string.Replace()
pathWithoutRoot = path.Replace(root, ""); Console.WriteLine(pathWithoutRoot); // prints test.txt
使用string.Substring()
pathWithoutRoot = path.Substring(root.Length); Console.WriteLine(pathWithoutRoot); // prints test.txt
使用Path.GetFileName()
pathWithoutRoot = Path.GetFileName(path); Console.WriteLine(pathWithoutRoot); // prints test.txt
你也可以使用正则表达式来查找和替换字符串的一部分,但这有点难度。 你可以阅读MSDN关于如何在C#中使用正则表达式。
下面是一个关于如何使用string.Remove()
, string.Replace()
, string.Substring()
, Path.GetFileName()
和Regex.Replace()
的完整示例:
using System; using System.IO; using System.Text.RegularExpressions; namespace ConsoleApplication5 { class Program { static void Main(string[] args) { var path = @"C:\test.txt"; var root = @"C:\"; var pathWithoutRoot = path.Remove(0, root.Length); Console.WriteLine(pathWithoutRoot); pathWithoutRoot = Path.GetFileName(path); Console.WriteLine(pathWithoutRoot); pathWithoutRoot = path.Replace(root, ""); Console.WriteLine(pathWithoutRoot); pathWithoutRoot = path.Substring(root.Length); Console.WriteLine(pathWithoutRoot); var pattern = "C:\\\\"; var regex = new Regex(pattern); pathWithoutRoot = regex.Replace(path, ""); Console.WriteLine(pathWithoutRoot); } } }
这一切都取决于你想要用字符串做什么,在这种情况下,你可能只想删除C:\
但下一次你可能想用字符串做其他类型的操作,也许删除尾部或类似的东西,那么以上不同的方法可能会帮助你。
对于这个具体的例子,我会看看路径类。 举个例子,你可以打电话给:
string pathminus = Path.GetFileName(path);
你看过Substring方法吗?
如果字符串实际上是一个文件路径,请使用Path.GetFileName
方法获取文件名称的一部分。
path.SubString(path.IndexOf('\'))
你想要System.Text.RegularExpressions.Regex
但你究竟在这里做什么?
最简单的形式是:
[TestMethod] public void RemoveDriveFromPath() { string path = @"C:\test.txt"; Assert.AreEqual("test.txt", System.Text.RegularExpressions.Regex.Replace(path, @"^[AZ]\:\\", string.Empty)); }
你只是想获得没有路径文件的文件名?
如果是这样做,而不是:
[TestMethod] public void GetJustFileName() { string path = @"C:\test.txt"; var fileInfo = new FileInfo(path); Assert.AreEqual("test.txt", fileInfo.Name); }
对于更一般的字符串,使用string.Split(inputChar)
,它将一个字符作为参数,并在找到inputChar的任何地方将字符串拆分为一个string[]
。
string[] stringArr = path.Split('\\'); // need double \ because \ is an escape character // you can now concatenate any part of the string array to get what you want. // in this case, it's just the last piece string pathminus = stringArr[stringArr.Length-1];