Mengubah string menjadi int di Groovy

286

Saya punya Stringyang mewakili nilai integer dan ingin mengubahnya menjadi int. Apakah ada padanan yang setara dengan Jawa Integer.parseInt(String)?

Steve Kuo
sumber
1
mengapa tidak menggunakan kata kunci def saja?
Omnipresent
4
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

int value = "99".toInteger()

Alternatif, yang menghindari menggunakan metode usang (lihat di bawah) adalah

int value = "66" as Integer

Jika Anda perlu memeriksa apakah String dapat dikonversi sebelum melakukan konversi, gunakan

String number = "66"

if (number.isInteger()) {
  int value = number as Integer
}

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
 */
public static Integer toInteger(CharSequence self) {
    return Integer.valueOf(self.toString().trim());
}

/**
 * @deprecated Use the CharSequence version
 * @see #toInteger(CharSequence)
 */
@Deprecated
public static Integer toInteger(String self) {
    return toInteger((CharSequence) self);
}

Anda dapat memaksa versi metode yang tidak usang dipanggil menggunakan sesuatu yang mengerikan seperti:

int num = ((CharSequence) "66").toInteger()

Secara pribadi, saya lebih suka:

int num = 66 as Integer
Dónal
sumber
19
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:

def number = '123' as int
Esko
sumber
10
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.

Halaman GDK yang relevan ada di sini.

Electrons_Ahoy
sumber
8
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.

Pembuat kertas
sumber
2
+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"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
Michael Easter
sumber
5
Jawaban ini juga melempar ketika string bukan angka - hati-hati!
Andres Kievsky
6

Anda juga dapat melakukan impor statis

import static java.lang.Integer.parseInt as asInteger

dan setelah penggunaan ini

String s = "99"
asInteger(s)
Andrey
sumber
Rapi, saya sering lupa tentang hal-hal kecil.
Magic Octopus Mm
3

toInteger() Metode tersedia di asyik, Anda bisa menggunakannya.

Aakarsh Gupta
sumber
2

Beberapa cara untuk mencapai ini. Contohnya seperti di bawah ini

a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")

Semoga ini membantu

Darth Shekhar
sumber
1
Bagaimana ini menambahkan sesuatu ke pertanyaan yang belum ada dalam 8 jawaban yang ada?
LukeG
Buruk saya, jadi agak serakah di sini
Darth Shekhar
1

Konversi Gaya asyik:

Integer num = '589' as Integer

Jika Anda memiliki parameter permintaan:

Integer age = params.int('age')
Sagar Mal Shankhala
sumber
1
def str = "32"

int num = str as Integer
ratzip
sumber
0

Ini cara lain. jika Anda tidak menyukai pengecualian.

def strnumber = "100"
def intValue = strnumber.isInteger() ?  (strnumber as int) : null
Berhanu Tarekegn
sumber
Saya pikir ini adalah jawaban yang sama dengan # 16877253 oleh @Shmaperator
MarkHu
0

Cara menggunakan masih harus menjadi toInteger (), karena itu tidak benar-benar usang.

int value = '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 ()

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.

Matematika Pagi
sumber
-1

Cara Sederhana Mengonversi String Menjadi Integer Di Groovy Adalah Sebagai Berikut ...

String aa="25"
int i= aa.toInteger()

Sekarang "i" Memegang Nilai Integer.

srinivasan
sumber
4
Apa yang ini tambahkan ke jawaban yang ada? Jawaban yang diterima yang diposting 9 tahun yang lalu dimulai dengan: "Gunakan toInteger()metode untuk mengonversi ...
default locale