次の文字列がある場合:
/ lorem / ipsum / dolor
そして私はこれを次のようにしたいと思います:
/ lorem / ipsum
最後のスラッシュとそれに続くすべての文字を削除する簡単な方法は何ですか?
文字列をaに分割し、最後の項目を削除してから結合することでこれを行う方法を知っていますが、List<>
これを書くためのより短い方法はありますか?
私の質問はURL固有ではありません。
あなたが使用することができSubstring()
ますLastIndexOf()
:
str = str.Substring(0, str.LastIndexOf('/'));
EDIT(推奨コメント)
文字列にが含まれていない可能性がある場合の問題を防ぐために/
、次のようなものを使用できます。
int lastSlash = str.LastIndexOf('/');
str = (lastSlash > -1) ? str.Substring(0, lastSlash) : str;
一時変数に位置を格納すると、2回呼び出す必要がなくなりますが、.LastIndexOf('/')
代わりに1行のソリューションを優先して削除することができます。
URLの末尾に「/」がある場合は削除します。そうでない場合; 元のものを返すだけです。
var url = this.Request.RequestUri.ToString();
url = url.EndsWith("/") ? url.Substring(0, url.Length - 1) : url;
url += @"/mycontroller";
簡単な方法の1つは
String s = "domain.com/lorem/ipsum/dolor";
s = s.Substring(0, s.LastIndexOf('/'));
Console.WriteLine(s);
別の多分
String s = "domain.com/lorem/ipsum/dolor";
s = s.TrimEnd('/');
Console.WriteLine(s);
のようなことを行うことができますがstr.Remove(str.LastIndexOf("/"))
、必要なことを行うための組み込みのメソッドはありません。
編集:Uriオブジェクトを使用してディレクトリをトラバースすることもできますが、必要なものが正確に提供されるわけではありません。
Uri baseUri = new Uri("http://domain.com/lorem/ipsum/dolor");
Uri myUri = new Uri(baseUri, ".");
// myUri now contains http://domain.com/lorem/ipsum/
正規表現を使用/[^/]*$
して、空の文字列に置き換えることができます。
var fixed = new Regex("/[^/]*$").Replace("domain.com/lorem/ipsum/dolor", "")
しかし、ここではおそらくやり過ぎです。@newfurnitureyのwithの答えSubstring
はLastIndexOf
おそらく最高です。
私はこのようなもののために文字列拡張子を作成するのが好きです:
/// <summary>
/// Returns with suffix removed, if present
/// </summary>
public static string TrimIfEndsWith(
this string value,
string suffix)
{
return
value.EndsWith(suffix) ?
value.Substring(0, value.Length - suffix.Length) :
value;
}
その後、次のように使用できます。
var myString = "/lorem/ipsum/dolor";
myStringClean = myString.TrimIfEndsWith("/dolor");
これで、すべてのプロジェクトで再利用可能な拡張機能を使用して、末尾の1文字または複数の文字を削除できます。
using System.IO;
mystring.TrimEnd(Path.AltDirectorySeparatorChar); // To remove "/"
mystring.TrimEnd(Path.DirectorySeparatorChar); // To remove "\"
while (input.Last() == '/' || input.Last() == '\\')
{
input = input.Substring(0, input.Length - 1);
}
質問ありがとうございます@Curt。@newfurnitureyのコードを少し改善しました。これが私のバージョンです。
if(str.Contains('/')){
str = str.Substring(0, str.LastIndexOf('/'));
}