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)?


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

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

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.


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.


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

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)

Rapi, saya sering lupa tentang hal-hal kecil.
Magic Octopus Mm


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


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')



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.


-1

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

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

Sekarang "i" Memegang Nilai Integer.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.