20

次の文字列がある場合:

/ lorem / ipsum / dolor

そして私はこれを次のようにしたいと思います:

/ lorem / ipsum

最後のスラッシュとそれに続くすべての文字を削除する簡単な方法は何ですか?

文字列をaに分割し、最後の項目を削除してから結合することでこれを行う方法を知っていますが、List<>これを書くためのより短い方法はありますか?

私の質問はURL固有ではありません。

4

9 に答える 9

47

あなたが使用することができSubstring()ますLastIndexOf()

str = str.Substring(0, str.LastIndexOf('/'));

EDIT(推奨コメント)
文字列にが含まれていない可能性がある場合の問題を防ぐために/、次のようなものを使用できます。

int lastSlash = str.LastIndexOf('/');
str = (lastSlash > -1) ? str.Substring(0, lastSlash) : str;

一時変数に位置を格納すると、2回呼び出す必要がなくなりますが、.LastIndexOf('/')代わりに1行のソリューションを優先して削除することができます。

于 2012-10-17T14:41:37.013 に答える
17

URLの末尾に「/」がある場合は削除します。そうでない場合; 元のものを返すだけです。

var url = this.Request.RequestUri.ToString();
url = url.EndsWith("/") ? url.Substring(0, url.Length - 1) : url;
url += @"/mycontroller";
于 2016-02-11T22:22:09.750 に答える
7

簡単な方法の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);
于 2012-10-17T14:46:21.490 に答える
7

のようなことを行うことができますが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/
于 2012-10-17T14:40:07.127 に答える
3

正規表現を使用/[^/]*$して、空の文字列に置き換えることができます。

var fixed = new Regex("/[^/]*$").Replace("domain.com/lorem/ipsum/dolor", "")

しかし、ここではおそらくやり過ぎです。@newfurnitureyのwithの答えSubstringLastIndexOfおそらく最高です。

于 2012-10-17T14:40:33.393 に答える
3

私はこのようなもののために文字列拡張子を作成するのが好きです:

/// <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文字または複数の文字を削除できます。

于 2015-09-16T19:05:29.057 に答える
1
using System.IO;

mystring.TrimEnd(Path.AltDirectorySeparatorChar); // To remove "/"
mystring.TrimEnd(Path.DirectorySeparatorChar); // To remove "\"
于 2021-10-13T01:43:26.163 に答える
0
        while (input.Last() == '/' || input.Last() == '\\')
        {
            input = input.Substring(0, input.Length - 1);
        }
于 2015-08-18T17:01:09.387 に答える
0

質問ありがとうございます@Curt。@newfurnitureyのコードを少し改善しました。これが私のバージョンです。

 if(str.Contains('/')){
      str = str.Substring(0, str.LastIndexOf('/'));
 }
于 2017-06-07T22:41:33.240 に答える