Bagaimana cara menghapus karakter terakhir dari sebuah string?


483

Saya ingin menghapus karakter terakhir dari sebuah string. Saya sudah mencoba melakukan ini:

public String method(String str) {
    if (str.charAt(str.length()-1)=='x'){
        str = str.replace(str.substring(str.length()-1), "");
        return str;
    } else{
        return str;
    }
}

Mendapatkan panjang string - 1 dan mengganti huruf terakhir dengan tidak ada (menghapusnya), tetapi setiap kali saya menjalankan program, itu menghapus huruf tengah yang sama dengan huruf terakhir.

Misalnya, kata itu adalah "pengagum"; setelah saya menjalankan metode, saya mendapatkan "admie." Saya ingin mengembalikan kata mengagumi.

Jawaban:


666

replaceakan mengganti semua contoh surat. Yang perlu Anda lakukan adalah menggunakan substring():

public String method(String str) {
    if (str != null && str.length() > 0 && str.charAt(str.length() - 1) == 'x') {
        str = str.substring(0, str.length() - 1);
    }
    return str;
}

7
Saya akan menambahkan null != str && di awal cek.
James Oravec

12
maksudmu str != null &&!
SSpoke

2
@Spoke itu hal yang sama, milikmu hanya sedikit lebih baik untuk dibaca :)
Marko

6
@Marko lol ya karena ini standar, terasa aneh ketika orang-orang membuat barang-barang mereka sendiri.
SSpoke

26
@AdamJensen Dalam C Anda dapat secara tidak sengaja menulis if (str = NULL)yang tidak hanya akan selalu bernilai false (NULL == 0 == false) tetapi juga akan memberikan nilai stryang kemungkinan besar bukan apa yang ingin Anda lakukan. Anda tidak dapat menulis if (NULL = str)karena NULL bukan variabel dan tidak dapat ditugaskan. Jadi, itu adalah konvensi yang lebih aman untuk meletakkan NULL di sebelah kiri. Ini bukan masalah di Jawa sekalipun.
Gyan alias Gary Buyn

236

Mengapa tidak hanya satu liner?

private static String removeLastChar(String str) {
    return str.substring(0, str.length() - 1);
}

Kode Lengkap

import java.util.*;
import java.lang.*;

public class Main {
    public static void main (String[] args) throws java.lang.Exception {
        String s1 = "Remove Last CharacterY";
        String s2 = "Remove Last Character2";
        System.out.println("After removing s1==" + removeLastChar(s1) + "==");
        System.out.println("After removing s2==" + removeLastChar(s2) + "==");

    }

    private static String removeLastChar(String str) {
        return str.substring(0, str.length() - 1);
    }
}

Demo


8
Pemeriksaan untuk string nol dan kosong harus dipertimbangkan .. Versi @BobBobBob lebih baik
KDjava

1
@KDjava: di atas valid dengan mempertimbangkan bahwa string yang valid dilewatkan. lain saya harus menambahkan blok coba tangkap juga untuk memeriksa bahwa string sudah benar ...
Fahim Parkar

saya menambahkan memeriksa null string sebelum return str.substring(0,str.length()-1);sebagai perbaikan
shareef

Terima kasih, sumber ini sedang digunakan di gist.github.com/CrandellWS/e254a215c54aa4be0400a3511a23f730
CrandellWS

@FahimParkar: Karena dimungkinkan bahwa karakter terakhir bukanlah karakter yang ingin kita hapus. Tetapi sesuai pertanyaan, jawaban Anda benar
Ash18

91

Karena kita sedang membahas suatu subjek, kita juga dapat menggunakan ekspresi reguler

"aaabcd".replaceFirst(".$",""); //=> aaabc  

3
cara yang baik, ketika Anda ingin / perlu mendefinisikan apa yang ingin Anda pangkas dari akhir string, bukan hanya X karakter apa pun
Julien

73

Masalah yang diuraikan dan solusi yang diajukan terkadang berhubungan dengan menghilangkan separator. Jika ini kasus Anda, silakan lihat Apache Commons StringUtils, ia memiliki metode yang disebut removeEnd yang sangat elegan.

Contoh:

StringUtils.removeEnd("string 1|string 2|string 3|", "|");

Akan menghasilkan: "string 1 | string 2 | string 3"


Inilah JAR untuk StringUtils yang disebutkan di atas: commons.apache.org/proper/commons-lang/download_lang.cgi
Tony H.

47
public String removeLastChar(String s) {
    if (s == null || s.length() == 0) {
        return s;
    }
    return s.substring(0, s.length()-1);
}

4
Bagaimana jika karakter terakhir adalah pasangan pengganti tinggi / rendah?
Robert Allan Hennigan Leahy

@RobertAllanHenniganLeahy saya mengirim jawaban yang menangani skenario itu.
Patrick Parker

33

Jangan mencoba menemukan kembali roda, sementara yang lain sudah menulis perpustakaan untuk melakukan manipulasi string: org.apache.commons.lang3.StringUtils.chop()


2
Jika Anda ingin menghapus karakter terakhir SAJA - ini adalah jawaban terbaik!
iaforek

Bukan itu, karena "menggunakan Java" adalah jawaban yang mengerikan untuk pertanyaan Kotlin.
Mikkel Løkke

2
@ MikkelLøkke Saya tidak tahu, tapi pertanyaan ini bukan pertanyaan Kotlin?
memberound

19

Gunakan ini:

 if(string.endsWith("x")) {

    string= string.substring(0, string.length() - 1);
 }

11
if (str.endsWith("x")) {
  return str.substring(0, str.length() - 1);
}
return str;

Misalnya, kata itu adalah "pengagum"; setelah saya menjalankan metode, saya mendapatkan "admie." Saya ingin mengembalikan kata mengagumi.

Jika Anda mencoba membendung kata-kata bahasa Inggris

Stemming adalah proses untuk mengurangi kata-kata yang infleksi (atau kadang-kadang diturunkan) ke batang, basis atau bentuk root-umumnya bentuk kata tertulis.

...

Sebuah stemmer untuk bahasa Inggris, misalnya, harus mengidentifikasi string "kucing" (dan mungkin "kucing", "kati" dll.) Sebagai berdasarkan pada root "kucing", dan "stemmer", "stemming", "stemmed" sebagai berdasarkan "batang". Algoritma stemming mengurangi kata "memancing", "memancing", "ikan", dan "fisher" menjadi kata dasar, "ikan".

Perbedaan antara Lucene stemmers: EnglishStemmer, PorterStemmer, LovinsStemmer menguraikan beberapa opsi Java.


11

Di Kotlin Anda dapat menggunakan metode dropLast () dari kelas string. Ini akan menjatuhkan nomor yang diberikan dari string, mengembalikan string baru

var string1 = "Some Text"
string1 = string1.dropLast(1)

9

Sejauh menyangkut keterbacaan, saya menemukan ini menjadi yang paling ringkas

StringUtils.substring("string", 0, -1);

Indeks negatif dapat digunakan dalam utilitas StringUtils Apache. Semua angka negatif diperlakukan dari offset dari ujung string.


Saya tidak akan mengatakan ini adalah jawaban terbaik - untuk kesederhanaan gunakan metode org.apache.commons.lang.StringUtils.chop (). Namun, trik dengan -1 benar-benar bagus dan melihat jawaban lain tidak benar-benar digunakan / terkenal.
iaforek

4

menghapus kejadian 'xxx' terakhir:

    System.out.println("aaa xxx aaa xxx ".replaceAll("xxx([^xxx]*)$", "$1"));

menghapus kejadian 'xxx' terakhir jika yang terakhir:

    System.out.println("aaa xxx aaa  ".replaceAll("xxx\\s*$", ""));

Anda dapat mengganti 'xxx' pada apa yang Anda inginkan tetapi hati-hati dengan karakter khusus


4
 // creating StringBuilder
 StringBuilder builder = new StringBuilder(requestString);
 // removing last character from String
 builder.deleteCharAt(requestString.length() - 1);

3
public String removeLastChar(String s) {
    if (!Util.isEmpty(s)) {
        s = s.substring(0, s.length()-1);
    }
    return s;
}

3

Lihat ke StringBuilder Class:

    StringBuilder sb=new StringBuilder("toto,");
    System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"

2
// Remove n last characters  
// System.out.println(removeLast("Hello!!!333",3));

public String removeLast(String mes, int n) {
    return mes != null && !mes.isEmpty() && mes.length()>n
         ? mes.substring(0, mes.length()-n): mes;
}

// Leave substring before character/string  
// System.out.println(leaveBeforeChar("Hello!!!123", "1"));

public String leaveBeforeChar(String mes, String last) {
    return mes != null && !mes.isEmpty() && mes.lastIndexOf(last)!=-1
         ? mes.substring(0, mes.lastIndexOf(last)): mes;
}

2

Satu jawaban (hanya alternatif lucu - jangan coba ini di rumah, dan jawaban bagus sudah diberikan):

public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}


2

Sebagian besar jawaban di sini lupa tentang pasangan pengganti .

Sebagai contoh, karakter 𝕫 (codepoint U + 1D56B) tidak cocok menjadi satu char , jadi untuk diwakili, itu harus membentuk sepasang pengganti dua karakter.

Jika seseorang hanya menerapkan jawaban yang saat ini diterima (menggunakan str.substring(0, str.length() - 1), satu splices pasangan pengganti, mengarah ke hasil yang tidak terduga.

Satu juga harus menyertakan cek apakah karakter terakhir adalah pasangan pengganti:

public static String removeLastChar(String str) {
    Objects.requireNonNull(str, "The string should not be null");
    if (str.isEmpty()) {
        return str;
    }

    char lastChar = str.charAt(str.length() - 1);
    int cut = Character.isSurrogate(lastChar) ? 2 : 1;
    return str.substring(0, str.length() - cut);
}

Pada sudut kasus: dapatkah ini melempar IndexOutOfBoundsException? (mis. mungkinkah Character.isSurrogate mengembalikan true ketika sebenarnya tidak ada char sebelumnya, membuat str.length()-cutnegatif).
GPI

Ya itu mungkin. Ini adalah string yang tidak valid, tapi tetap saja - itu mungkin, ya. Satu maka harus diganti 2oleh Math.min(2, str.length()).
MC Emperor

1

Java 8

import java.util.Optional;

public class Test
{
  public static void main(String[] args) throws InterruptedException
  {
    System.out.println(removeLastChar("test-abc"));
  }

  public static String removeLastChar(String s) {
    return Optional.ofNullable(s)
      .filter(str -> str.length() != 0)
      .map(str -> str.substring(0, str.length() - 1))
      .orElse(s);
    }
}

Keluaran: test-ab


1
 "String name" = "String name".substring(0, ("String name".length() - 1));

Saya menggunakan ini dalam kode saya, mudah dan sederhana. itu hanya berfungsi ketika String> 0. Saya telah terhubung ke tombol dan di dalam pernyataan if berikut

if ("String name".length() > 0) {
    "String name" = "String name".substring(0, ("String name".length() - 1));
}

1
public String removeLastCharacter(String str){
       String result = null;
        if ((str != null) && (str.length() > 0)) {
          return str.substring(0, str.length() - 1);
        }
        else{
            return "";
        }

}

0

jika Anda memiliki karakter khusus seperti; di json cukup gunakan String.replace (";", "") kalau tidak, Anda harus menulis ulang semua karakter dalam string dikurangi yang terakhir.


0

Cara membuat char di rekursi di akhir:

public static String  removeChar(String word, char charToRemove)
    {
        String char_toremove=Character.toString(charToRemove);
        for(int i = 0; i < word.length(); i++)
        {
            if(word.charAt(i) == charToRemove)
            {
                String newWord = word.substring(0, i) + word.substring(i + 1);
                return removeChar(newWord,charToRemove);
            }
        }
        System.out.println(word);
        return word;
    }

sebagai contoh:

removeChar ("hello world, let's go!",'l')  "heo word, et's go!llll"
removeChar("you should not go",'o')  "yu shuld nt goooo"

0

Berikut jawaban yang berfungsi dengan titik-titik kode di luar Basic Multilingual Plane (Java 8+).

Menggunakan stream:

public String method(String str) {
    return str.codePoints()
            .limit(str.codePoints().count() - 1)
            .mapToObj(i->new String(Character.toChars(i)))
            .collect(Collectors.joining());
}

Lebih efisien mungkin:

public String method(String str) {
    return str.isEmpty()? "": str.substring(0, str.length() - Character.charCount(str.codePointBefore(str.length())));
}

0

Kita bisa menggunakan substring. Inilah contohnya,

public class RemoveStringChar 
{
    public static void main(String[] args) 
    {   
        String strGiven = "Java";
        System.out.println("Before removing string character - " + strGiven);
        System.out.println("After removing string character - " + removeCharacter(strGiven, 3));
    }

    public static String removeCharacter(String strRemove, int position)
    {   
        return strRemove.substring(0, position) + strRemove.substring(position + 1);    
    }
}

0

ganti saja kondisi "jika" seperti ini:

if(a.substring(a.length()-1).equals("x"))'

ini akan melakukan trik untuk Anda.


0

Misalkan total panjang string saya = 24 Saya ingin memotong karakter terakhir setelah posisi 14 sampai akhir, berarti saya ingin mulai 14 berada di sana. Jadi saya terapkan solusi berikut.

String date = "2019-07-31T22:00:00.000Z";
String result = date.substring(0, date.length() - 14);

0

Saya harus menulis kode untuk masalah yang sama. Salah satu cara yang saya dapat menyelesaikannya menggunakan metode pengkodean rekursif.

static String removeChar(String word, char charToRemove)
{
    for(int i = 0; i < word.lenght(); i++)
    {
        if(word.charAt(i) == charToRemove)
        {
            String newWord = word.substring(0, i) + word.substring(i + 1);
            return removeChar(newWord, charToRemove);
        }
    }

    return word;
}

Sebagian besar kode yang saya lihat pada topik ini tidak menggunakan rekursi jadi semoga saya dapat membantu Anda atau seseorang yang memiliki masalah yang sama.


0

Peasy mudah:

StringBuilder sb= new StringBuilder();
for(Entry<String,String> entry : map.entrySet()) {
        sb.append(entry.getKey() + "_" + entry.getValue() + "|");
}
String requiredString = sb.substring(0, sb.length() - 1);

-1

Ini adalah satu cara untuk menghapus karakter terakhir dalam string:

Scanner in = new Scanner(System.in);
String s = in.nextLine();
char array[] = s.toCharArray();
int l = array.length;
for (int i = 0; i < l-1; i++) {
    System.out.print(array[i]);
}
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.