Java - menghapus karakter pertama dari sebuah string

215

Di Jawa, saya punya String:

Jamaica

Saya ingin menghapus karakter pertama dari string dan kemudian kembali amaica

Bagaimana saya melakukan ini?

Calibre2010
sumber

Jawaban:

341

Gunakan substring()fungsi dengan argumen 1untuk mendapatkan substring dari posisi 1 ( setelah karakter pertama) ke akhir string (membiarkan argumen kedua keluar default ke panjang penuh dari string).

"Jamaica".substring(1);
moinudin
sumber
21
Penting untuk dicatat bahwa ini tidak benar-benar menghapus karakter dari string - ini memberi Anda string baru yang memiliki semua karakter dari string lama kecuali yang pertama. Tidak ada cara untuk benar-benar memodifikasi string.
Chris Dodd
Tautan tampaknya tidak lagi valid. Coba tautan berikut sebagai gantinya: substring (int)
Christian Hoffmann
1
Ya, jika Anda ingin menghapus n karakter pertama dari variabel string Anda melakukan ini: variable = variable.substring (n);
Mitulát báti
67
public String removeFirstChar(String s){
   return s.substring(1);
}
Ahmed Kotb
sumber
12
Jika Anda akan mendefinisikan fungsi baru, setidaknya pilih nama yang cocok seperti removeFirst().
moinudin
55

Gunakan substring()dan berikan jumlah karakter yang ingin Anda pangkas dari depan.

String value = "Jamaica";
value = value.substring(1);

Jawab: "amaica"

Thilina Gihan Priyankara
sumber
47

Di Jawa, hapus karakter utama hanya jika itu adalah karakter tertentu

Gunakan operator ternary Java untuk memeriksa dengan cepat apakah karakter Anda ada di sana sebelum menghapusnya. Ini menghapus karakter utama hanya jika ada, jika melewati string kosong, kembali blankstring.

String header = "";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

header = "foobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

header = "#moobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

Cetakan:

blankstring
foobar
moobar

Java, hapus semua instance karakter di mana saja dalam sebuah string:

String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"

Java, hapus instance pertama dari karakter mana saja di string:

String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"
Eric Leschinski
sumber
4
KERING:header = header.substring(header.startsWith("#") ? 1 : 0);
Aaron Blenkush
3
Atau dengan regex:header = header.replaceFirst("^#","");
Aaron Blenkush
18

Anda bisa menggunakan metode substring dari Stringkelas yang hanya mengambil indeks awal dan mengembalikan substring yang dimulai dengan karakter pada indeks yang ditentukan dan meluas ke akhir string.

String str = "Jamaica";
str = str.substring(1);
codaddict
sumber
11
public String removeFirst(String input)
{
    return input.substring(1);
}
Reese Moore
sumber
11

Hal utama yang perlu dipahami di Jawa adalah bahwa String tidak dapat diubah - Anda tidak dapat mengubahnya. Jadi tidak masuk akal untuk berbicara tentang 'menghapus karakter dari string'. Sebagai gantinya, Anda membuat string BARU hanya dengan karakter yang Anda inginkan. Posting lain dalam pertanyaan ini memberi Anda berbagai cara untuk melakukan itu, tetapi penting untuk memahami bahwa ini tidak mengubah string asli dengan cara apa pun. Referensi apa pun yang Anda miliki ke string lama akan terus merujuk ke string lama (kecuali jika Anda mengubahnya untuk merujuk ke string lain) dan tidak akan terpengaruh oleh string yang baru dibuat.

Ini memiliki sejumlah implikasi untuk kinerja. Setiap kali Anda 'memodifikasi' string, Anda benar-benar membuat string baru dengan semua overhead tersirat (alokasi memori dan pengumpulan sampah). Jadi jika Anda ingin membuat serangkaian modifikasi pada string dan hanya peduli tentang hasil akhir (string menengah akan mati segera setelah Anda 'memodifikasi' mereka), mungkin lebih masuk akal untuk menggunakan StringBuilder atau StringBuffer sebagai gantinya.

Chris Dodd
sumber
9

Anda bisa melakukan ini:

String str="Jamaica";
str=str.substring(1, title.length());
return str;

atau secara umum:

public String removeFirstChar(String str){
   return str.substring(1, title.length());
}
eli pagi
sumber
8

substring () metode kembali sebuah String baru yang berisi subsequence karakter saat ini terdapat dalam urutan ini.

The substring dimulai pada tertentu startdan meluas ke karakter di index end - 1.

Ini memiliki dua bentuk. Yang pertama adalah

  1. String substring(int FirstIndex)

Di sini, FirstIndex menentukan indeks di mana substring akan dimulai. Formulir ini mengembalikan salinan substring yang dimulai di FirstIndex dan berjalan ke akhir string yang memanggil.

  1. String substring(int FirstIndex, int endIndex)

Di sini, FirstIndex menentukan indeks awal, dan endIndex menentukan titik berhenti. String yang dikembalikan berisi semua karakter dari indeks awal, hingga, tetapi tidak termasuk, indeks akhir.

Contoh

    String str="Amiyo";
   // prints substring from index 3
   System.out.println("substring is = " + str.substring(3)); // Output "yo'
IntelliJ Amiya
sumber
4

Saya menemukan situasi di mana saya harus menghapus tidak hanya karakter pertama (jika itu adalah #, tetapi set karakter pertama).

String myString = ###Hello Worldbisa menjadi titik awal, tetapi saya hanya ingin menyimpannya Hello World. ini bisa dilakukan sebagai berikut.

while (myString.charAt(0) == '#') { // Remove all the # chars in front of the real string
    myString = myString.substring(1, myString.length());
}

Untuk kasus OP, ganti whiledengan ifdan berfungsi juga.

Mathieu Brouwers
sumber
1
Akan ada masalah jika myString == "#" karena String akan keluar batas di beberapa titik. Untuk mencegah hal ini, Anda dapat melakukan (! MyString.isEmpty () && myString.charAt (0))
Christian
2

Solusi lain, Anda dapat memecahkan masalah Anda menggunakan replaceAlldengan beberapa regex ^.{1}( demo regex ) misalnya:

String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica
YCF_L
sumber
1

Versi saya menghapus karakter utama, satu atau beberapa. Sebagai contoh, String str1 = "01234", ketika menghapus memimpin '0', hasilnya akan menjadi "1234". Untuk String str2 = "000123" hasilnya akan menjadi lagi "123". Dan untuk String str3 = "000" hasilnya adalah string kosong: "". Fungsionalitas seperti itu sering berguna ketika mengubah string numerik menjadi angka. Keuntungan dari solusi ini dibandingkan dengan regex (replaceAll (...)) adalah bahwa ini jauh lebih cepat. Ini penting saat memproses sejumlah besar String.

 public static String removeLeadingChar(String str, char ch) {
    int idx = 0;
    while ((idx < str.length()) && (str.charAt(idx) == ch))
        idx++;
    return str.substring(idx);
}
Andrushenko Alexander
sumber