Groovy에서 문자열을 int로 변환


286

나는이 String정수 값을 나타냅니다를하고로 변환하고 싶습니다 int. Java와 같은 그루비가 Integer.parseInt(String)있습니까?


1
왜 def 키워드를 사용하지 않습니까?
Omnipresent

4
정수가 포함 된 문자열 매개 변수가 있습니다. def i = string_parameter를 사용하면 나중에 i를 int로 사용하면 클래스 캐스트 예외가 발생합니다.
Steve Kuo

답변:


492

사용 toInteger()를 변환하는 방법을 StringInteger, 예를 들어,

int value = "99".toInteger()

더 이상 사용되지 않는 방법 (아래 참조)을 사용하지 않는 대안은 다음과 같습니다.

int value = "66" as Integer

변환을 수행하기 전에 변환 String 가능 여부를 확인해야하는 경우

String number = "66"

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

지원 중단 업데이트

Groovy의 최신 버전에서는 toInteger()방법 중 하나 가 사용되지 않습니다. 다음은 org.codehaus.groovy.runtime.StringGroovyMethodsGroovy 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);
}

더 이상 사용되지 않는 버전의 메소드를 다음과 같은 것을 사용하여 강제로 호출 할 수 있습니다.

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

개인적으로 저는 훨씬 선호합니다 :

int num = 66 as Integer

19
주의 사항 : 문자열이 숫자가 아닌 경우 예외가 발생 isInteger()하므로 값을 먼저 확인해야합니다 toInteger(). 동일은 적용 toFloat()/isFloat()
안드레스 Kievsky에게

8
에서 2.1.6 API 문서 isInteger / toInteger 메서드 사용되지 않습니다. 그렇다면 현재 가장 좋은 방법은 무엇입니까?
pakman

1
정수 사용 paramValue = params.int ( 'paramName')은 null 안전하지 않습니다. 매개 변수 맵에 이름이 "paramName"인 매개 변수가 없으면 널을 int로 캐스트 할 수 없다는 예외가 발생합니다.
Michael

2
Groovy 1.8 int이 실제로 있기 때문에 추가하고 싶었습니다 int. 그루비는 여전히 때문에 권투의, Integer 클래스를 표시합니다,하지만 당신은 예를 들어 할당 할 수 없습니다 nullint1.0에서 가능이었다. type의 메소드 호출 매개 변수에 대해 널을 인수로 이미 사용할 수 없으므로 변경 사항이 중요하지 않은 것으로 간주했습니다 int. Java에서는 간단한 할당으로 Integer를 Long으로 변환하거나 Long을 사용하여 int taking 메소드를 호출 할 수 없으므로 Java와는 여전히 다릅니다.
blackdrag

1
@pakman StringGroovyMethods.isInteger(String)DefaultGroovyMethods.isInteger(CharSequence)찬성되지 않습니다 StringGroovyMethods.isInteger(CharSequence). 동일합니다 toInteger().
bmaupin

67

여러 가지 방법으로이 방법을 가장 좋아합니다.

def number = '123' as int

10
위와 같은 문제로 문자열이 숫자가 아닌 경우 예외가 발생합니다. isInteger()먼저 확인하십시오 .
Andres Kievsky

12
@ank 질문 Integer.parseInt(String)은 문자열이 숫자가 아닌 경우 예외를 던지는 것과 동등한 것을 요구했습니다. 따라서 질문이 주어지면 이것을 "문제"로 간주하지 않습니다
Dónal

30

에 추가로 돈의 대답은 , 끝내 추가하지 않습니다 만 .toInteger()에 방법 String들, 또한 추가 toBigDecimal(), toBigInteger(), toBoolean(), toCharacter(), toDouble(), toFloat(), toList(),와 toLong().

같은 맥락에서, 그루비는 해당 형식을 해당 형식으로 구문 분석 할 수있는 경우 is*반환되는 모든 항목에 동등 값을 추가합니다 .trueString

관련 GDK 페이지 가 여기에 있습니다.


8
이것은 정답입니다-먼저 확인한 isInteger()다음 수행하십시오 toInteger()... 즉, try/ catch블록을 추가하지 않는 한 :) 예외를 사용하는 것은 좋지 않습니다.
Andres Kievsky

2
@anktastic 나는 질문이 "Java의 Integer.parseInt (String)과 같은 그루비에 해당한다", 즉 확인되지 않은 변환
Dónal

25

그것이 최신 버전의 groovy (초기 답변이 상당히 오래됨)에 도입되었는지 확실하지 않지만 이제는 다음을 사용할 수 있습니다.

def num = mystring?.isInteger() ? mystring.toInteger() : null

또는

def num = mystring?.isFloat() ? mystring.toFloat() : null

제공된 문자열을 신뢰할 수없는 경우 정수 대신 float 또는 double을 사용하는 것이 좋습니다.


2
+1 최상의 솔루션 IMO 변환 전에 형식 검사와 함께 null 검사가 포함되어 있기 때문에
kaskelotti

플로트 또는 복식은 본질적으로 정확하지 않으므로 사용하지 않는 것이 좋습니다. Groovy는 다른 숫자만큼 BigDecimal을 쉽게 사용할 수 있으므로 정수보다 정확도가 더 필요한 경우이를 사용하십시오. 둘째,이 접근법은 안전 해 보이지만 결과는 num == null 일 수 있으므로주의해야합니다.
Hans Bogaards

첫 번째 샘플 코드의 경우 mystring.toInteger()대신 대신 쓰고 싶었던 것 같습니다 mystring.toFloat(). 그래서 def num = mystring?.isInteger() ? mystring.toInteger() : null올바른 것입니다.
Sk8erPeter

15

Groovy는 Java 형식을 그대로 받아들입니다. Groovier 방법 이 있는지 묻는 경우 로 이동하는 방법이 Integer있습니다.

둘 다 여기에 표시됩니다.

String s = "99"
assert 99 == Integer.parseInt(s)
Integer i = s as Integer
assert 99 == i

5
이 답변은 문자열이 숫자가 아닌 경우에도 발생합니다. 조심하십시오!
Andres Kievsky

6

또한 당신은 정적 가져 오기를 할 수 있습니다

import static java.lang.Integer.parseInt as asInteger

그리고이 사용 후

String s = "99"
asInteger(s)

깔끔한, 나는 작은 것들을 많이 잊어 버렸습니다.
매직 문어 Urn


2

이를 달성하기위한 몇 가지 방법. 예는 다음과 같습니다

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

도움이 되었기를 바랍니다


1
8 개의 기존 답변에 아직없는 질문에 어떻게 추가합니까?
LukeG

나의 나쁜, 여기에 약간 탐욕
스러워

1

그루비 스타일 변환 :

Integer num = '589' as Integer

요청 매개 변수가있는 경우 :

Integer age = params.int('age')



0

사용 방법은 여전히 ​​toInteger () 여야합니다. 실제로는 더 이상 사용되지 않습니다.

int value = '99'.toInteger()

String 버전은 더 이상 사용되지 않지만 CharSequence는 String이 구현하는 인터페이스입니다. 따라서 메소드가 CharSequence에서만 작동하는 경우에도 코드는 여전히 작동하기 때문에 문자열을 사용하는 것이 좋습니다. isInteger ()와 동일

이 질문을 참조하십시오 : String을 CharSequence로 변환하는 방법?

나는이 방법에 대해 더 이상 사용되지 않는다는 개념이 혼란스러워 다른 사람들에게는 그것을 피하고 싶기 때문에 논평했다.


-1

Groovy에서 문자열을 정수로 변환하는 간단한 방법은 다음과 같습니다.

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

이제 "i"는 정수 값을 보유합니다.


4
기존 답변에 무엇이 추가됩니까? "사용 : 허용 대답은 시작 전 구년 게시 toInteger()... Conver 유럽에 방법을
기본 로케일을
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.