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.

Ankush soni
sumber

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;
}
Gyan alias Gary Buyn
sumber
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

Fahim Parkar
sumber
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  
iddqd
sumber
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"

Mart135688
sumber
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);
}
BobBobBob
sumber
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()

anggota
sumber
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);
 }
Navaneeth
sumber
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.

Mike Samuel
sumber
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)
Mahavir Jain
sumber
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.

Kasturi
sumber
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

Arkadiusz Cieśliński
sumber
4
 // creating StringBuilder
 StringBuilder builder = new StringBuilder(requestString);
 // removing last character from String
 builder.deleteCharAt(requestString.length() - 1);
Bachan Joseph
sumber
3
public String removeLastChar(String s) {
    if (!Util.isEmpty(s)) {
        s = s.substring(0, s.length()-1);
    }
    return s;
}
Ganesa Vijayakumar
sumber
3

Lihat ke StringBuilder Class:

    StringBuilder sb=new StringBuilder("toto,");
    System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"
aeocom
sumber
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;
}
Oleksandr Paldypanida
sumber
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;}
Nick Louloudakis
sumber
2

Mengapa tidak menggunakan urutan pelarian ...!

System.out.println(str + '\b');

Hidup sekarang jauh lebih mudah. XD! ~ Satu kalimat yang bisa dibaca

Tilak Maddy
sumber
Bukankah ini Java. LMAO
baranskistad
Perilaku khusus '\ b' ditafsirkan oleh pembaca string, terminal teks dll. Jika tidak, itu hanya representasi karakter ASCII lainnya. stackoverflow.com/a/11891895/4589003
Sudip Bhandari
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);
}
MC Emperor
sumber
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

Nadhu
sumber
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));
}
Donoso
sumber
1
public String removeLastCharacter(String str){
       String result = null;
        if ((str != null) && (str.length() > 0)) {
          return str.substring(0, str.length() - 1);
        }
        else{
            return "";
        }

}
C Williams
sumber
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.

MoadKey
sumber
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"
simon francis
sumber
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())));
}
Patrick Parker
sumber
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);    
    }
}
Siwa
sumber
0

ganti saja kondisi "jika" seperti ini:

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

ini akan melakukan trik untuk Anda.

Syed Salman Hassan
sumber
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);
Avinash Khadsan
sumber
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.

Jacob Mehnert
sumber
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);
RoboC
sumber
-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]);
}
alagu raja
sumber