Bagaimana cara mendapatkan n
karakter pertama dari string di Java tanpa melakukan pemeriksaan ukuran terlebih dahulu (inline dapat diterima) atau mempertaruhkan IndexOutOfBoundsException
?
java
string
indexoutofboundsexception
antony.trupe
sumber
sumber
Jawaban:
Inilah solusi yang rapi:
Opini: sementara solusi ini "rapi", saya pikir itu sebenarnya kurang dapat dibaca daripada solusi yang menggunakan
if
/else
dengan cara yang jelas. Jika pembaca belum melihat trik ini, dia harus berpikir lebih keras untuk memahami kode. IMO, makna kode lebih jelas diif
/else
versi. Untuk solusi yang lebih bersih / lebih mudah dibaca, lihat jawaban @ paxdiablo.sumber
Jangan menemukan kembali roda ...:
Javadoc mengatakan:
Jadi:
sumber
StringUtils.substring(yourString, 0, n)
tidak sama denganyourString.substring(0, n)
. Yang pertama adalah dariStringUtils
, sedangkan yang kedua menggunakanString.substring
(yang memberikan pengecualian jika indeks akhir melebihi panjang string).if (end > str.length()) { end = str.length();}
StringUtils.substring(String s, int start, int len)
adalah tidak len, itu adalah Indeks akhir.Apache Commons Lang memiliki
StringUtils.left
metode untuk ini.sumber
Ada kelas pertanyaan di SO yang kadang-kadang masuk akal, yang satu ini sangat dekat :-)
Mungkin Anda bisa menjelaskan keengganan Anda untuk menggunakan salah satu dari dua metode yang Anda singkirkan.
Jika itu hanya karena Anda tidak ingin menambahkan kode Anda dengan
if
pernyataan atau kode penangkapan pengecualian, salah satu solusinya adalah menggunakan fungsi pembantu yang akan mengurusnya untuk Anda, seperti:yang akan memeriksa panjang sebelumnya dan bertindak sesuai (baik mengembalikan string atau pad yang lebih kecil dengan spasi).
Maka Anda tidak perlu khawatir tentang hal itu dalam kode Anda sama sekali, cukup hubungi:
dari pada:
Ini akan bekerja jika Anda khawatir (berdasarkan komentar Anda untuk jawaban lain), tidak memutus aliran kode ketika melakukan banyak hal membangun string.
sumber
Mengerikan jika
n
adalah variabel (jadi Anda harus membangun string format), tetapi cukup jelas jika konstanta:docs
sumber
Gunakan metode substring, sebagai berikut:
Jika n lebih besar dari panjang string, ini akan menghasilkan pengecualian, seperti yang ditunjukkan oleh seorang komentator. salah satu solusi sederhana adalah dengan membungkus semua ini dalam kondisi
if(s.length()<n)
dielse
klausa Anda, Anda dapat memilih apakah Anda hanya ingin mencetak / mengembalikan seluruh String atau menanganinya dengan cara lain.sumber
Jika Anda cukup beruntung untuk berkembang bersama Kotlin,
Anda dapat menggunakannya
take
untuk mencapai tujuan Anda.sumber
ApacheCommons mengejutkan saya,
StringUtils.abbreviate(String str, int maxWidth)
menambahkan "..." tidak ada opsi untuk mengubah postfix.WordUtils.abbreviate(String str, int lower, int upper, String appendToEnd)
melihat ke ruang kosong berikutnya.Saya hanya akan meninggalkan ini di sini:
sumber
Kotlin: (Jika ada yang butuh)
sumber