文字列から最後の文字を切り取る


回答:


298
"Hello! world!".TrimEnd('!');

続きを読む

編集:

このタイプの質問で私が気付いたことは、ほとんどの人が特定の文字列の最後の文字を削除することを提案していることです。しかし、これはトリム法の定義を満たしていません。

トリム-このインスタンスの最初と最後からすべての空白文字を削除します。

MSDN-Trim

この定義では、文字列から最後の文字のみを削除することは悪い解決策です。

したがって、「文字列から最後の文字を切り捨てる」には、次のようにします。

拡張メソッドの例:

public static class MyExtensions
{
  public static string TrimLastCharacter(this String str)
  {
     if(String.IsNullOrEmpty(str)){
        return str;
     } else {
        return str.TrimEnd(str[str.Length - 1]);
     }
  }
}

同じ値のすべての文字を削除する場合は注意してください(!!!!)上記のメソッドは、存在するすべての '!'を削除します。文字列の最後からですが、最後の文字だけを削除したい場合は、これを使用する必要があります:

else { return str.Remove(str.Length - 1); }

1
文字列の最後から削除する文字を常に知っている限り、これはより良い方法です。
Nimrod Shory

1
こんにちはVash、RegExを使用した私のソリューションについてどう思いますか?これは、Thqrの要求を満たし、「!」を削除できます。任意の「世界」からのchar!式、式が配置されている任意の場所、1行のコード。
マルチェロファガ2010

24
-1このソリューションは、同じ終了文字をすべて削除します!例:「こんにちは!!!!!!!!」"Hello"に入れます。これにより、最後の文字が削除されます。
Kugel、

1
@Kugel、あなたは完全に正しい、そしてそれであなたは私の答えをもう一度読むべきです。説明のためにOPは最後の文字を削除する方法を尋ねませんが、それをトリミングする方法を尋ねます。
DamianLeszczyński-Vash

1
@Vash-「Hello!world!」というメソッドを使用して、単一引用符をどのように削除しますか?TrimEnd( '!');
Steam


9
if (yourString.Length > 1)
    withoutLast = yourString.Substring(0, yourString.Length - 1);

または

if (yourString.Length > 1)
    withoutLast = yourString.TrimEnd().Substring(0, yourString.Length - 1);

...空白以外の文字を最後から削除したい場合。


9
コメントなしで反対票を相殺するだけに賛成しました。人々がそうするときそれを憎む。
ジェフレディ2013

2
TrimEnd()メソッドがなかったためである可能性があり、それがあった場合、後続のSubstring(..)呼び出しが短い文字列で失敗する可能性があります。
Rory

7
        string s1 = "Hello! world!";
        string s2 = s1.Trim('!');

どのようにendswithプロパティを操作するのですか?ここで使用できますか?
userAZLogicApps 2017年

1
Trim()はひどく名前が付けられています。TrimStart()およびTrimEnd()と同様に、先頭と末尾のすべての文字(複数)をトリミングします
アントニーブース


5
string helloOriginal = "Hello! World!";
string newString = helloOriginal.Substring(0,helloOriginal.LastIndexOf('!'));

5

文字列から最後の文字をトリミングする別の例:

string outputText = inputText.Remove(inputText.Length - 1, 1);

あなたはそれを拡張メソッドに入れて、null文字列などから防ぐことができます。


3
string s1 = "Hello! world!"
string s2 = s1.Substring(0, s1.Length - 1);
Console.WriteLine(s1);
Console.WriteLine(s2);

2

これを使用することもできます:

public static class Extensions
 {

        public static string RemovePrefix(this string o, string prefix)
        {
            if (prefix == null) return o;
            return !o.StartsWith(prefix) ? o : o.Remove(0, prefix.Length);
        }

        public static string RemoveSuffix(this string o, string suffix)
        {
            if(suffix == null) return o;
            return !o.EndsWith(suffix) ? o : o.Remove(o.Length - suffix.Length, suffix.Length);
        }

    }


1

@DamianLeszczyńskiのわずかに変更されたバージョン-特定の文字のみが削除されることを確認するVash。

public static class StringExtensions
{
    public static string TrimLastCharacter(this string str, char character)
    {
        if (string.IsNullOrEmpty(str) || str[str.Length - 1] != character)
        {
            return str;
        }
        return str.Substring(0, str.Length - 1);
    }
}

0

TrimEndを使用して拡張機能を作成する方法を採用したのは、既にインラインで使用していて、満足しているからです。つまり、

static class Extensions
{
        public static string RemoveLastChars(this String text, string suffix)
        {            
            char[] trailingChars = suffix.ToCharArray();

            if (suffix == null) return text;
            return text.TrimEnd(trailingChars);
        }

}

静的クラス; Pを使用してクラスに名前空間を含めるようにしてください。使用法は次のとおりです。

string _ManagedLocationsOLAP = string.Empty;
_ManagedLocationsOLAP = _validManagedLocationIDs.RemoveLastChars(",");          

0

これを簡略化する拡張クラスの例:-

internal static class String
{
    public static string TrimEndsCharacter(this string target, char character) => target?.TrimLeadingCharacter(character).TrimTrailingCharacter(character);
    public static string TrimLeadingCharacter(this string target, char character) => Match(target?.Substring(0, 1), character) ? target.Remove(0,1) : target;
    public static string TrimTrailingCharacter(this string target, char character) => Match(target?.Substring(target.Length - 1, 1), character) ? target.Substring(0, target.Length - 1) : target;

    private static bool Match(string value, char character) => !string.IsNullOrEmpty(value) && value[0] == character;
}

使用法

"!Something!".TrimLeadingCharacter('X'); // Result '!Something!' (No Change)
"!Something!".TrimTrailingCharacter('S'); // Result '!Something!' (No Change)
"!Something!".TrimEndsCharacter('g'); // Result '!Something!' (No Change)

"!Something!".TrimLeadingCharacter('!'); // Result 'Something!' (1st Character removed)
"!Something!".TrimTrailingCharacter('!'); // Result '!Something' (Last Character removed)
"!Something!".TrimEndsCharacter('!'); // Result 'Something'  (End Characters removed)

"!!Something!!".TrimLeadingCharacter('!'); // Result '!Something!!' (Only 1st instance removed)
"!!Something!!".TrimTrailingCharacter('!'); // Result '!!Something!' (Only Last instance removed)
"!!Something!!".TrimEndsCharacter('!'); // Result '!Something!'  (Only End instances removed)

-5

「!」を削除したい場合 特定の表現(あなたのケースでは「世界」)からの文字、そしてあなたはこの正規表現を使うことができます

string input = "Hello! world!";

string output = Regex.Replace(input, "(world)!", "$1", RegexOptions.Multiline | RegexOptions.Singleline);

// result: "Hello! world"

$ 1の特殊文字には、一致するすべての「世界」式が含まれており、元の「世界」を置き換えるために使用されます。表情

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.