Potong karakter terakhir dari sebuah string


157

Saya punya string katakan

"Hello! world!" 

Saya ingin melakukan trim atau menghapus untuk mengambil! off dunia tetapi tidak off Hello.


1
Mungkin itu di luar permintaan Anda, tetapi bisakah saya meminta Anda meluangkan waktu untuk berpikir tentang menggunakan regex yang saya usulkan?
Marcello Faga

Jawaban:


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

Baca lebih lajut

EDIT:

Apa yang saya perhatikan dalam jenis pertanyaan ini yang disarankan oleh setiap orang untuk menghapus karakter terakhir dari string yang diberikan. Tetapi ini tidak memenuhi definisi metode Trim.

Trim - Menghapus semua kemunculan karakter spasi putih dari awal dan akhir instance ini.

MSDN-Trim

Di bawah definisi ini hanya menghapus karakter terakhir dari string adalah solusi yang buruk.

Jadi jika kita ingin "Memotong karakter terakhir dari string" kita harus melakukan sesuatu seperti ini

Contoh sebagai metode ekstensi:

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

Catatan jika Anda ingin menghapus semua karakter dengan nilai yang sama yaitu (!!!!) metode di atas menghapus semua keberadaan '!' dari akhir string, tetapi jika Anda ingin menghapus hanya karakter terakhir Anda harus menggunakan ini:

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

1
Ini lebih baik selama Anda selalu tahu karakter apa yang ingin Anda hapus dari ujung String.
Nimrod Shory

1
Hai Vash, apa pendapat Anda tentang solusi saya menggunakan RegEx? Itu memenuhi permintaan Thqr dan memungkinkan untuk menghapus '!' char dari "dunia!" ekspresi, di mana pun ekspresi ditempatkan, hanya dalam satu baris kode.
Marcello Faga

24
-1 Solusi ini akan menghapus semua karakter akhir yang sama! Misalnya akan berubah "Halo !!!!!!!!" ke "Hello", yang menghapus lebih dari karakter terakhir.
Kugel

1
@ Kugel, Anda benar sekali, dan itulah mengapa Anda harus membaca sekali lagi jawaban saya. Untuk penjelasan OP jangan tanya bagaimana cara menghapus karakter terakhir, tetapi bagaimana cara memangkasnya.
Damian Leszczyński - Vash

1
@ Vash - bagaimana Anda menghapus satu kutipan 'menggunakan metode - "Hello! World!". TrimEnd ('! ');
Steam

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

14
Pastikan bahwa yourString berisi setidaknya 1 karakter.
Nimrod Shory

juga pastikan string Anda selalu berakhir pada karakter yang ingin Anda hapus EG: "Hello! World" akan berakhir sebagai "Hello! Worl".
Nathan Koop

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

atau

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

... jika Anda ingin menghapus karakter non-spasi putih dari akhir.


9
Saya memilih hanya untuk mengimbangi downvote tanpa komentar. Benci ketika orang melakukan itu.
Jeff Reddy

2
Mungkin karena tidak ada TrimEnd()metode dan jika ada itu bisa membuat Substring(..)panggilan berikutnya gagal pada string pendek.
Rory

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

bagaimana cara bekerja dengan properti endswith? dapatkah digunakan di sini?
userAZLogicApps

1
Trim () dinamai sangat buruk. Ini memangkas semua karakter utama dan tambahan (jamak), seperti halnya TrimStart () dan TrimEnd ()
Antony Booth


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

5

Contoh lain dari pemangkasan karakter terakhir dari string:

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

Anda dapat memasukkannya ke metode ekstensi dan mencegahnya dari string nol, dll.


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

2

Anda juga bisa menggunakan ini:

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

Sangat mudah dan sederhana:

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


1

Versi @Damian Leszczyński yang sedikit dimodifikasi - Vash yang akan memastikan bahwa hanya karakter tertentu yang akan dihapus.

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

Saya mengambil jalan menulis ekstensi menggunakan TrimEnd hanya karena saya sudah menggunakannya inline dan senang dengan itu ... yaitu:

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

}

Pastikan Anda memasukkan namespace di kelas Anda menggunakan kelas statis; P dan penggunaannya adalah:

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

0

Contoh kelas Ekstensi untuk menyederhanakan ini: -

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

Pemakaian

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

Jika Anda ingin menghapus '!' karakter dari ekspresi tertentu ("dunia" dalam kasus Anda), maka Anda dapat menggunakan ekspresi reguler ini

string input = "Hello! world!";

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

// result: "Hello! world"

karakter spesial $ 1 berisi semua ekspresi "dunia" yang cocok, dan digunakan untuk menggantikan "dunia!" ekspresi

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.