我有一个字符串,其路径如下所示:
"Salle de bains / 01-Points d'eau / 01-01 Vasques"
现在我想将此路径更改为如下所示:
"Salle de bains/01-Points d'eau/01-01 Vasques"
我已经尝试了Trim
、Replace
和Substring
都没有成功。然后我尝试了这种方法:
private string UrlCreator(string dir)
{
string dirFinish = dir;
foreach(Char item in dirFinish)
{
if (Char.IsWhiteSpace(item) && ((item-1).Equals('/') || (item+1).Equals('/')))
{
string charToChange = item.ToString();
charToChange = "";
}
else { }
}
return dirFinish;
}
但这并没有给我想要的结果。我怎样才能做到这一点?
使用字符串替换方法:
var myString = "Salle de bains / 01-Points d'eau / 01-01 Vasques";
var result = myString.Replace(" / ", "/");
// result -> "Salle de bains/01-Points d'eau/01-01 Vasques"
实现此目的的另一种方法是将Split(" / ")
与string.Join("/");
相结合:
var input = "Salle de bains / 01-Points d'eau / 01-01 Vasques";
var output = string.Join("/", input.Split(" / ")); // Salle de bains/01-Points d'eau/ 01-01 Vasques
表演与使用Replace()
完全相同,但是,Replace()
当然更容易阅读,迈克尔汉考克的答案是要走的路
如果您不知道/
前后的空格数,您也可以使用 RegEx
var input = "Maison 42 / Salle de bains /01-Points d'eau/ 01-01 Vasques";
string pattern = @"s*/s*";
string replacement = "/";
// using System.Text.RegularExpressions;
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
输出为
梅森 42/贝恩斯厅/01分/01-01 瓦斯克
该模式s*/s*
执行以下操作:
s*
搜索任意数量的空格
/
后跟正斜杠
s*
后跟任意数量的空格
泛化:如果要删除/
前后任意数量的空格,可以使用正则表达式:
using System.Text.RegularExpressions;
...
// two spaces after 1st '/'; no spaces before 2nd '/'
string source = "Salle de bains / 01-Points d'eau/ 01-01 Vasques";
string result = Regex.Replace(source, @"s*/s*", "/");
Console.Write(result);
结果:
Salle de bains/01-Points d'eau/01-01 Vasques
另一种可能性是Linq
using System.Linq;
...
string result = string.Join("/", source.Split('/').Select(item => item.Trim()));