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.

Sphvn
sumber
1
Mungkin itu di luar permintaan Anda, tetapi bisakah saya meminta Anda meluangkan waktu untuk berpikir tentang menggunakan regex yang saya usulkan?
Marcello Faga
1
Kemungkinan rangkap dari Hapus karakter terakhir dari string
Tor Klingberg

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); }
Damian Leszczyński - Vash
sumber
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));
Nimrod Shory
sumber
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.

James
sumber
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('!');
JDunkerley
sumber
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
6

Coba ini:

return( (str).Remove(str.Length-1) );
M. Hamza Rajput
sumber
5
string helloOriginal = "Hello! World!";
string newString = helloOriginal.Substring(0,helloOriginal.LastIndexOf('!'));
Nissim
sumber
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.

Bronek
sumber
3
string s1 = "Hello! world!"
string s2 = s1.Substring(0, s1.Length - 1);
Console.WriteLine(s1);
Console.WriteLine(s2);
Jonathan
sumber
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);
        }

    }
Omu
sumber
1

Sangat mudah dan sederhana:

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

Seyfi
sumber
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);
    }
}
Mykhailo Seniutovych
sumber
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(",");          
Brian Wells
sumber
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)
Antony Booth
sumber
-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

Marcello Faga
sumber