Tôi có một String
đại diện cho một giá trị số nguyên và muốn chuyển đổi nó thành một int
. Có một Groovy tương đương với Java Integer.parseInt(String)
?
Tôi có một String
đại diện cho một giá trị số nguyên và muốn chuyển đổi nó thành một int
. Có một Groovy tương đương với Java Integer.parseInt(String)
?
Câu trả lời:
Sử dụng toInteger()
phương thức để chuyển đổi a String
thành an Integer
, vd
int value = "99".toInteger()
Một cách khác, tránh sử dụng phương pháp không dùng nữa (xem bên dưới) là
int value = "66" as Integer
Nếu bạn cần kiểm tra xem String
có thể chuyển đổi trước khi thực hiện chuyển đổi hay không, hãy sử dụng
String number = "66"
if (number.isInteger()) {
int value = number as Integer
}
Trong các phiên bản gần đây của Groovy, một trong những toInteger()
phương pháp đã không được chấp nhận. Sau đây được lấy từ org.codehaus.groovy.runtime.StringGroovyMethods
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);
}
Bạn có thể buộc phiên bản không được dùng của phương thức được gọi bằng cách sử dụng một cái gì đó khủng khiếp như:
int num = ((CharSequence) "66").toInteger()
Cá nhân, tôi rất thích:
int num = 66 as Integer
isInteger()
trước, vì toInteger()
sẽ đưa ra một ngoại lệ nếu chuỗi không phải là số. toFloat()
isFloat()
int
thực sự là vậy int
. Groovy vẫn sẽ hiển thị lớp Integer, vì quyền anh, nhưng ví dụ, bạn sẽ không thể gán null
cho một int
, điều có thể có trong 1.0. Chúng tôi coi thay đổi là không quan trọng, vì bạn đã không thể sử dụng null làm đối số cho tham số gọi phương thức loại int
. Tất cả vẫn khác với Java, vì trong Java, bạn không thể chuyển đổi Integer thành Long bằng một phép gán đơn giản hoặc gọi một phương thức int lấy bằng Long.
StringGroovyMethods.isInteger(String)
và DefaultGroovyMethods.isInteger(CharSequence)
không được ủng hộ StringGroovyMethods.isInteger(CharSequence)
. Cùng đi cho toInteger()
.
Một số cách để làm điều này, đây là cách yêu thích của tôi:
def number = '123' as int
isInteger()
đầu tiên.
Integer.parseInt(String)
cũng ném Ngoại lệ nếu chuỗi không phải là số, vì vậy, với câu hỏi, tôi không coi đây là "vấn đề"
Là một phụ lục cho câu trả lời của Don , không chỉ Groovy thêm một.toInteger()
phương pháp để String
s, nó cũng cho biết thêm toBigDecimal()
, toBigInteger()
, toBoolean()
, toCharacter()
, toDouble()
, toFloat()
, toList()
, và toLong()
.
Trong cùng một hướng, Groovy cũng thêm các is*
eqivalents cho tất cả những người trả về true
nếu String
câu hỏi có thể được phân tích thành định dạng trong câu hỏi.
Trang GDK có liên quan ở đây.
isInteger()
, sau đó làm toInteger()
... nghĩa là, trừ khi bạn muốn thêm mộttry
/ catch
khối :) nhưng sử dụng ngoại lệ cho việc này là một ý tưởng tồi.
Tôi không chắc liệu nó có được giới thiệu trong các phiên bản gần đây của Groovy không (câu trả lời ban đầu khá cũ), nhưng bây giờ bạn có thể sử dụng:
def num = mystring?.isInteger() ? mystring.toInteger() : null
hoặc là
def num = mystring?.isFloat() ? mystring.toFloat() : null
Tôi khuyên bạn nên sử dụng số float hoặc thậm chí gấp đôi thay vì số nguyên trong trường hợp nếu chuỗi được cung cấp không đáng tin cậy.
mystring.toInteger()
thay vì mystring.toFloat()
. Như vậy def num = mystring?.isInteger() ? mystring.toInteger() : null
sẽ đúng.
Vâng, Groovy chấp nhận hình thức Java tốt. Nếu bạn đang hỏi nếu có một cách Groovier , có một cách để đi đến Integer
.
Cả hai đều được hiển thị ở đây:
String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i
bạn cũng có thể thực hiện nhập tĩnh
import static java.lang.Integer.parseInt as asInteger
và sau khi sử dụng
String s = "99"
asInteger(s)
toInteger()
phương pháp có sẵn trong Groovy, bạn có thể sử dụng đó.
Một số cách để đạt được điều này. Ví dụ như dưới đây
a. return "22".toInteger()
b. if("22".isInteger()) return "22".toInteger()
c. return "22" as Integer()
d. return Integer.parseInt("22")
Hi vọng điêu nay co ich
Chuyển đổi Groovy Style:
Integer num = '589' as Integer
Nếu bạn có tham số yêu cầu:
Integer age = params.int('age')
Đây là một cách khác. nếu bạn không thích ngoại lệ.
def strnumber = "100"
def intValue = strnumber.isInteger() ? (strnumber as int) : null
Cách sử dụng vẫn phải là toInteger (), vì nó không thực sự bị phản đối.
int value = '99'.toInteger()
Phiên bản Chuỗi không được dùng nữa, nhưng CharSequence là Giao diện mà Chuỗi thực hiện. Vì vậy, sử dụng String là ok, bởi vì mã của bạn vẫn sẽ hoạt động ngay cả khi phương thức sẽ chỉ hoạt động với CharSequence. Tương tự với isInteger ()
Xem câu hỏi này để tham khảo: Làm thế nào để chuyển đổi Chuỗi thành CharSequence?
Tôi nhận xét, bởi vì khái niệm không tán thành phương pháp này khiến tôi bối rối và tôi muốn tránh điều đó cho người khác.
Cách đơn giản hơn để chuyển đổi một chuỗi thành số nguyên trong Groovy là như sau ...
String aa="25"
int i= aa.toInteger()
Bây giờ "i" Giữ giá trị số nguyên.
toInteger()
phương pháp để hội tụ ...