Dizeden son karakteri kes


157

Bir ipim var

"Hello! world!" 

Çıkarmak için bir düzeltme veya kaldırma yapmak istiyorum! dünyadan ama kapalı değil Merhaba.


1
Belki isteğinizin ötesindedir, ancak önerdiğim normal ifadeyi kullanmayı düşünmek için bir dakikanızı ayırabilir miyim?
Marcello Faga

Yanıtlar:


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

daha fazla oku

DÜZENLE:

Oldukça herkesin verilen dizenin son karakterini kaldırmayı önerdiği bu tür sorularda fark ettiklerim. Ancak bu Trim yönteminin tanımını karşılamaz.

Kırp - Bu örneğin başından ve sonundan boşluk karakterlerinin tüm oluşumlarını kaldırır.

MSDN-Trim

Bu tanım altında dizeden sadece son karakteri kaldırmak kötü bir çözümdür.

Eğer "karakter dizgiden kes" istiyorsak böyle bir şey yapmalıyız

Genişletme yöntemi olarak örnek:

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]);
     }
  }
}

Not Aynı değer yani tüm karakterleri kaldırmak için (!!!!) uzaklaşmaların tüm varoluşlarda yukarıdaki yöntemi istiyorsanız '!' ancak son karakteri kaldırmak istiyorsanız bunu kullanmalısınız:

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

1
Bu, Dize'nin sonundan hangi karakteri kaldırmak istediğinizi her zaman bildiğiniz sürece daha iyidir.
Nemrut Shory

1
Merhaba Vash, bir RegEx kullanarak çözümüm hakkında ne düşünüyorsun? Thqr'ın isteğini yerine getirir ve '!' herhangi bir "dünya!" ifade, ifadenin yerleştirildiği her yerde, yalnızca bir kod satırında.
Marcello Faga

24
-1 Bu çözüm aynı bitiş karakterlerinin tümünü kaldıracak! Örneğin "Merhaba !!!!!!!!" son karakterden daha fazlasını kaldıran "Merhaba"
Kugel

1
@Kugel, Tamamen haklısın ve bu yüzden cevabımı bir kez daha okumalısın. OP açıklaması için son karakterin nasıl kaldırılacağını değil, nasıl düzeltileceğini sorun.
Damian Leszczyński - Vash

1
@Vash - "Merhaba! Dünya!" Yöntemini kullanarak tek bir alıntıyı nasıl kaldırırsınız? TrimEnd ('!');
Buhar

65
String withoutLast = yourString.Substring(0,(yourString.Length - 1));

14
Yalnızca dizinizde en az 1 karakter bulunduğundan emin olun.
Nemrut Shory

Ayrıca dizenizin her zaman EG'yi kaldırmak istediğiniz karakterle sonlandığından emin olun: "Hello! World", "Hello! Worl" olarak sonuçlanır.
Nathan Koop

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

veya

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

... boşluk olmayan bir karakteri sondan kaldırmak istemeniz durumunda.


9
Sadece bir yorum yapmadan aşağı oyu dengelemek için upvoted. İnsanlar bunu yaptığında nefret ediyorum.
Jeff Reddy

2
Bunun nedeni herhangi bir TrimEnd()yöntem olmaması olabilir ve eğer varsa, sonraki Substring(..)çağrıların kısa dizelerde başarısız olmasına neden olabilir .
Rory

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

uçları özelliği ile nasıl çalışılır? burada kullanılabilir mi?
userAZLogicApps

1
Trim () çok kötü adlandırılmış. TrimStart () ve TrimEnd () gibi tüm önde gelen ve sondaki karakterleri (çoğul) keser
Antony Booth


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

5

Bir dizeden son karakteri kırpmanın başka bir örneği :

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

Bir uzantı yöntemine koyabilir ve boş dizeden vb. Önleyebilirsiniz.


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

2

bunu da kullanabilirsiniz:

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

Çok kolay ve basit:

str = str.Remove (str.Length - 1);


1

@Damian Leszczyński - Vash'in biraz değiştirilmiş versiyonu, sadece belirli bir karakterin kaldırılmasını sağlayacaktır.

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 kullanarak bir uzantı yazma yolunu aldım, çünkü zaten satır içi kullanıyordum ve bundan memnun kaldım ... yani:

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);
        }

}

Statik sınıfı kullanarak sınıflarınıza ad alanını eklediğinizden emin olun; P ve kullanımı:

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

0

Bunu basitleştirmek için örnek bir Extension sınıfı: -

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;
}

kullanım

"!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

'!' İşaretini kaldırmak istiyorsanız belirli bir ifadedeki karakteri (sizin durumunuzda "dünya") kullanırsanız, bu normal ifadeyi kullanabilirsiniz

string input = "Hello! world!";

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

// result: "Hello! world"

$ 1 özel karakteri eşleşen tüm "dünya" ifadelerini içerir ve orijinal "dünya" nın yerine kullanılır! ifade

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.