Saya memiliki parameter string yang berisi bilangan bulat. Menggunakan def i = string_parameter menghasilkan pengecualian cast kelas jika nantinya saya menggunakan i sebagai int.
Steve Kuo
Jawaban:
492
Gunakan toInteger()metode untuk mengonversi a Stringmenjadi Integer, misalnya
intvalue="99".toInteger()
Alternatif, yang menghindari menggunakan metode usang (lihat di bawah) adalah
intvalue="66"asInteger
Jika Anda perlu memeriksa apakah Stringdapat dikonversi sebelum melakukan konversi, gunakan
String number ="66"if(number.isInteger()){intvalue= number asInteger}
Pembaruan Penghentian
Dalam versi Groovy terbaru salah satu toInteger()metode telah usang. Berikut ini diambil dari org.codehaus.groovy.runtime.StringGroovyMethodsdalam Groovy 2.4.4
/**
* Parse a CharSequence into an Integer
*
* @param self a CharSequence
* @return an Integer
* @since 1.8.2
*/publicstaticInteger toInteger(CharSequenceself){returnInteger.valueOf(self.toString().trim());}/**
* @deprecated Use the CharSequence version
* @see #toInteger(CharSequence)
*/@DeprecatedpublicstaticInteger toInteger(Stringself){return toInteger((CharSequence)self);}
Anda dapat memaksa versi metode yang tidak usang dipanggil menggunakan sesuatu yang mengerikan seperti:
Caveat emptor: Anda harus memeriksa nilainya isInteger()terlebih dahulu, karena toInteger()akan mengeluarkan pengecualian jika string tidak numerik. Hal yang sama berlaku untuk toFloat()/isFloat()
Andres Kievsky
8
Dalam dokumentasi api 2.1.6 isInteger / toInteger tidak digunakan lagi. Apa cara terbaik saat ini untuk melakukan ini?
pakman
1
Menggunakan Integer, paramValue = params.int ('paramName') bukan nol yang aman. Jika tidak ada param dengan nama "paramName" di peta param Anda mendapatkan pengecualian tentang tidak dapat membuang null ke int.
Michael
2
hanya ingin menambahkan, itu karena Groovy 1.8 intmemang int. Groovy masih akan menampilkan kelas Integer, karena tinju, tetapi Anda misalnya tidak akan dapat menetapkan nullke int, yang dimungkinkan pada 1.0. Kami menganggap perubahan itu tidak kritis, karena Anda sudah tidak bisa menggunakan null sebagai argumen untuk jenis parameter pemanggilan metode int. Ini semua masih berbeda dari Jawa, karena di Jawa Anda tidak dapat mengkonversi Integer ke Long dengan penugasan sederhana atau memanggil metode pengambilan int dengan Long.
blackdrag
1
@pakman StringGroovyMethods.isInteger(String)dan DefaultGroovyMethods.isInteger(CharSequence)tidak digunakan lagi StringGroovyMethods.isInteger(CharSequence). Sama berlaku untuk toInteger().
bmaupin
67
Beberapa cara untuk melakukannya, ini favorit saya:
Masalah yang sama seperti di atas, ini akan melempar pengecualian jika string bukan angka. Periksa isInteger()dulu.
Andres Kievsky
12
@ terima kasih pertanyaan yang diajukan untuk yang setara Integer.parseInt(String)yang juga melemparkan Pengecualian jika string bukan angka, jadi diberi pertanyaan, saya tidak menganggap ini sebagai "masalah"
Dónal
30
Sebagai tambahan untuk jawaban Don , tidak hanya asyik menambahkan .toInteger()metode untuk Strings, itu juga menambahkan toBigDecimal(), toBigInteger(), toBoolean(), toCharacter(), toDouble(), toFloat(), toList(), dan toLong().
Dalam nada yang sama, groovy juga menambahkan is*persamaan untuk semua yang kembali truejika Stringpertanyaan tersebut dapat diuraikan ke dalam format yang dimaksud.
Ini adalah jawaban yang benar - tanyakan dulu dengan isInteger(), lalu lakukan toInteger()... itu, kecuali Anda lebih suka menambahkan try/ catchblok :) tetapi menggunakan pengecualian untuk ini adalah ide yang buruk.
Andres Kievsky
2
@anktastic Saya berpendapat bahwa jawaban saya lebih tepat karena pertanyaannya adalah "setara dengan Java's Integer.parseInt (String)", yaitu konversi yang tidak dicentang
Lanjutan
25
Saya tidak yakin apakah itu diperkenalkan di versi groovy terbaru (jawaban awal sudah cukup lama), tetapi sekarang Anda dapat menggunakan:
def num = mystring?.isInteger()? mystring.toInteger():null
atau
def num = mystring?.isFloat()? mystring.toFloat():null
Saya sarankan menggunakan pelampung atau bahkan ganda daripada bilangan bulat dalam kasus ini jika string yang disediakan tidak dapat diandalkan.
+1 solusi IMO terbaik karena termasuk cek nol dan ketik cek sebelum konversi
kaskelotti
Saya merekomendasikan untuk tidak menggunakan pelampung atau ganda karena secara inheren tidak akurat. Karena Groovy menggunakan BigDecimals semudah Nomor lainnya, jika Anda membutuhkan akurasi lebih dari Integer, gunakan itu. Kedua, pendekatan ini tampaknya aman, tetapi hasilnya bisa berupa num == null, jadi Anda harus berhati-hati dengan itu
Hans Bogaards
Untuk kode sampel pertama, saya kira Anda ingin menulis mystring.toInteger()alih-alih mystring.toFloat(). Jadi def num = mystring?.isInteger() ? mystring.toInteger() : nullitu benar.
Sk8erPeter
15
Yah, Groovy menerima bentuk Java dengan baik. Jika Anda bertanya apakah ada cara Groovier , ada cara untuk melakukannya Integer.
Keduanya ditampilkan di sini:
String s ="99"assert99==Integer.parseInt(s)Integer i = s asIntegerassert99== i
Cara menggunakan masih harus menjadi toInteger (), karena itu tidak benar-benar usang.
intvalue='99'.toInteger()
Versi String sudah usang, tetapi CharSequence adalah sebuah Interface yang mengimplementasikan String. Jadi, menggunakan String tidak apa-apa, karena kode Anda akan tetap berfungsi walaupun metode tersebut hanya akan bekerja dengan CharSequence. Hal yang sama berlaku untuk isInteger ()
Apa yang ini tambahkan ke jawaban yang ada? Jawaban yang diterima yang diposting 9 tahun yang lalu dimulai dengan: "Gunakan toInteger()metode untuk mengonversi ...
Jawaban:
Gunakan
toInteger()
metode untuk mengonversi aString
menjadiInteger
, misalnyaAlternatif, yang menghindari menggunakan metode usang (lihat di bawah) adalah
Jika Anda perlu memeriksa apakah
String
dapat dikonversi sebelum melakukan konversi, gunakanPembaruan Penghentian
Dalam versi Groovy terbaru salah satu
toInteger()
metode telah usang. Berikut ini diambil dariorg.codehaus.groovy.runtime.StringGroovyMethods
dalam Groovy 2.4.4Anda dapat memaksa versi metode yang tidak usang dipanggil menggunakan sesuatu yang mengerikan seperti:
Secara pribadi, saya lebih suka:
sumber
isInteger()
terlebih dahulu, karenatoInteger()
akan mengeluarkan pengecualian jika string tidak numerik. Hal yang sama berlaku untuktoFloat()
/isFloat()
int
memangint
. Groovy masih akan menampilkan kelas Integer, karena tinju, tetapi Anda misalnya tidak akan dapat menetapkannull
keint
, yang dimungkinkan pada 1.0. Kami menganggap perubahan itu tidak kritis, karena Anda sudah tidak bisa menggunakan null sebagai argumen untuk jenis parameter pemanggilan metodeint
. Ini semua masih berbeda dari Jawa, karena di Jawa Anda tidak dapat mengkonversi Integer ke Long dengan penugasan sederhana atau memanggil metode pengambilan int dengan Long.StringGroovyMethods.isInteger(String)
danDefaultGroovyMethods.isInteger(CharSequence)
tidak digunakan lagiStringGroovyMethods.isInteger(CharSequence)
. Sama berlaku untuktoInteger()
.Beberapa cara untuk melakukannya, ini favorit saya:
sumber
isInteger()
dulu.Integer.parseInt(String)
yang juga melemparkan Pengecualian jika string bukan angka, jadi diberi pertanyaan, saya tidak menganggap ini sebagai "masalah"Sebagai tambahan untuk jawaban Don , tidak hanya asyik menambahkan
.toInteger()
metode untukString
s, itu juga menambahkantoBigDecimal()
,toBigInteger()
,toBoolean()
,toCharacter()
,toDouble()
,toFloat()
,toList()
, dantoLong()
.Dalam nada yang sama, groovy juga menambahkan
is*
persamaan untuk semua yang kembalitrue
jikaString
pertanyaan tersebut dapat diuraikan ke dalam format yang dimaksud.Halaman GDK yang relevan ada di sini.
sumber
isInteger()
, lalu lakukantoInteger()
... itu, kecuali Anda lebih suka menambahkantry
/catch
blok :) tetapi menggunakan pengecualian untuk ini adalah ide yang buruk.Saya tidak yakin apakah itu diperkenalkan di versi groovy terbaru (jawaban awal sudah cukup lama), tetapi sekarang Anda dapat menggunakan:
atau
Saya sarankan menggunakan pelampung atau bahkan ganda daripada bilangan bulat dalam kasus ini jika string yang disediakan tidak dapat diandalkan.
sumber
mystring.toInteger()
alih-alihmystring.toFloat()
. Jadidef num = mystring?.isInteger() ? mystring.toInteger() : null
itu benar.Yah, Groovy menerima bentuk Java dengan baik. Jika Anda bertanya apakah ada cara Groovier , ada cara untuk melakukannya
Integer
.Keduanya ditampilkan di sini:
sumber
Anda juga dapat melakukan impor statis
dan setelah penggunaan ini
sumber
toInteger()
Metode tersedia di asyik, Anda bisa menggunakannya.sumber
Beberapa cara untuk mencapai ini. Contohnya seperti di bawah ini
Semoga ini membantu
sumber
Konversi Gaya asyik:
Jika Anda memiliki parameter permintaan:
sumber
sumber
Ini cara lain. jika Anda tidak menyukai pengecualian.
sumber
Cara menggunakan masih harus menjadi toInteger (), karena itu tidak benar-benar usang.
Versi String sudah usang, tetapi CharSequence adalah sebuah Interface yang mengimplementasikan String. Jadi, menggunakan String tidak apa-apa, karena kode Anda akan tetap berfungsi walaupun metode tersebut hanya akan bekerja dengan CharSequence. Hal yang sama berlaku untuk isInteger ()
Lihat pertanyaan ini untuk referensi: Bagaimana cara mengubah sebuah String ke CharSequence?
Saya berkomentar, karena gagasan usang tentang metode ini membuat saya bingung dan saya ingin menghindarinya untuk orang lain.
sumber
Cara Sederhana Mengonversi String Menjadi Integer Di Groovy Adalah Sebagai Berikut ...
Sekarang "i" Memegang Nilai Integer.
sumber
toInteger()
metode untuk mengonversi ...