我正在尝试创建一个新字符串,从现有字符串中删除某些字符,例如
string path = "C:\test.txt"
所以字符串“pathminus”会取出“C:\”,例如
string pathminus = "test.txt"
答案 0 :(得分:12)
答案 1 :(得分:11)
有很多方法可以删除字符串的某个部分。这有几种方法可以做到:
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
您也可以使用正则表达式来查找和替换字符串的某些部分,但这有点困难。 You can read on MSDN on how to use Regular Expressions in 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:\
但下次你可能想要用字符串做其他类型的操作,也许删除尾部或者说,以上不同的方法可能会帮助你。
答案 2 :(得分:3)
字符串类提供了各种方法来实现此目的。
如果您想通过删除前三个字符将“C:\ test.txt”更改为“test.txt”:
path.Substring(3);
如果要从字符串中的任何位置删除“C:\”:
path.Replace("C:\", "");
或者,如果您特别需要文件名,无论路径有多长:
Path.GetFileName(path);
根据您的意图,有很多方法可以做到这一点。我更喜欢使用静态类Path
。
答案 3 :(得分:2)
对于这个具体的例子,我会研究Path类。举个例子,你可以打电话:
string pathminus = Path.GetFileName(path);
答案 4 :(得分:1)
您是否查看了Substring方法?
答案 5 :(得分:0)
如果字符串实际上是文件路径,请使用Path.GetFileName
方法获取文件名的一部分。
答案 6 :(得分:0)
path.SubString(path.IndexOf('\'))
答案 7 :(得分:0)
你想要System.Text.RegularExpressions.Regex
,但你到底想要做什么呢?
最简单的形式:
[TestMethod]
public void RemoveDriveFromPath()
{
string path = @"C:\test.txt";
Assert.AreEqual("test.txt", System.Text.RegularExpressions.Regex.Replace(path, @"^[A-Z]\:\\", string.Empty));
}
您是否只是尝试获取没有路径的文件的文件名?
若是,请改为:
[TestMethod]
public void GetJustFileName()
{
string path = @"C:\test.txt";
var fileInfo = new FileInfo(path);
Assert.AreEqual("test.txt", fileInfo.Name);
}
答案 8 :(得分:0)
对于更一般的字符串,请使用string.Split(inputChar)
,它将字符作为参数,并将字符串拆分为string[]
,无论在哪里找到inputChar。
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];