343

I have a String that represents an integer value and would like to convert it to an int. Is there a groovy equivalent of Java's Integer.parseInt(String)?

2
  • 1
    why not just use the def keyword? Commented Nov 11, 2009 at 6:51
  • 5
    I have a string parameter that contains an integer. Using def i = string_parameter results in class cast exception if I later use i as an int. Commented Nov 11, 2009 at 19:03

13 Answers 13

576

Use the toInteger() method to convert a String to an Integer, e.g.

int value = "99".toInteger()

An alternative, which avoids using a deprecated method (see below) is

int value = "66" as Integer

If you need to check whether the String can be converted before performing the conversion, use

String number = "66"

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

Deprecation Update

In recent versions of Groovy one of the toInteger() methods has been deprecated. The following is taken from org.codehaus.groovy.runtime.StringGroovyMethods in 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);
}

You can force the non-deprecated version of the method to be called using something awful like:

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

Personally, I much prefer:

int num = 66 as Integer
Sign up to request clarification or add additional context in comments.

8 Comments

Caveat emptor: you need to check the value with isInteger() first, because toInteger() will throw an exception if the string is not numeric. Same applies to toFloat()/isFloat()
In the 2.1.6 api documentation isInteger/toInteger are deprecated. What is the current best way to do this then?
Using Integer paramValue = params.int('paramName') isn't null safe though. If there is no param with the name "paramName" in the param map you get an exception about can't cast null to int.
just wanted to add, that since Groovy 1.8 int is indeed int. Groovy will still display the Integer class, because of boxing, but you will for example not be able to assign null to an int, which was possible in 1.0. We considered the change being non-critical, since you already could not use null as argument for a method call parameter of type int. This is all still different from Java, as in Java you cannot convert Integer to Long by a simple assignment or call an int taking method with a Long.
@pakman StringGroovyMethods.isInteger(String) and DefaultGroovyMethods.isInteger(CharSequence) are deprecated in favor of StringGroovyMethods.isInteger(CharSequence). Same goes for toInteger().
|
75

Several ways to do it, this one's my favorite:

def number = '123' as int

3 Comments

Same problem as above, this will throw an exception if the string is not a number. Check with isInteger() first.
@ank the question asked for an equivalent of Integer.parseInt(String) which also throws an Exception if the string is not a number, so given the question, I don't consider this a "problem"
I believe this is the way Groovy intends it to be done. You can generally use 'as' as a type conversion for anything (Sometimes you may have to attach a converter method, like if you really want to do JFrame as Boolean or something crazy like that.
32

As an addendum to Don's answer, not only does groovy add a .toInteger() method to Strings, it also adds toBigDecimal(), toBigInteger(), toBoolean(), toCharacter(), toDouble(), toFloat(), toList(), and toLong().

In the same vein, groovy also adds is* eqivalents to all of those that return true if the String in question can be parsed into the format in question.

The relevant GDK page is here.

2 Comments

This is the correct answer - check first with isInteger(), then do toInteger()... that is, unless you'd rather add a try/catch block :) but using exceptions for this is a bad idea.
@anktastic I'd argue that my answer is more correct because the question asked for "a groovy equivalent of Java's Integer.parseInt(String)", i.e. an unchecked conversion
27

I'm not sure if it was introduced in recent versions of groovy (initial answer is fairly old), but now you can use:

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

or

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

I recommend using floats or even doubles instead of integers in the case if the provided string is unreliable.

3 Comments

+1 best solution IMO as it includes null check in addition to type check before conversion
I recommend against using floats or doubles because they are inherently inaccurate. As Groovy makes using BigDecimals as easy as any other Number, if you need more accuracy than an Integer, use that. Secondly, this approach seems safe, but the result can be that num == null, so you need to be careful with that
For the first sample code, I guess you wanted to write mystring.toInteger() instead of mystring.toFloat(). So def num = mystring?.isInteger() ? mystring.toInteger() : null would be correct.
19

Well, Groovy accepts the Java form just fine. If you are asking if there is a Groovier way, there is a way to go to Integer.

Both are shown here:

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

1 Comment

This answer also throws when the string is not numeric - watch out!
7

also you can make static import

import static java.lang.Integer.parseInt as asInteger

and after this use

String s = "99"
asInteger(s)

1 Comment

Neat, I forget about the small things a lot.
3

toInteger() method is available in groovy, you could use that.

Comments

3

Several ways to achieve this. Examples are as below

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

Hope this helps

2 Comments

How is this adding anything to the question not already present in the 8 existing answers?
My bad, got a bit greedy here
1

Groovy Style conversion:

Integer num = '589' as Integer

If you have request parameter:

Integer age = params.int('age')

Comments

1
def str = "32"

int num = str as Integer

Comments

1

The way to use should still be the toInteger(), because it is not really deprecated.

int value = '99'.toInteger()

The String version is deprecated, but the CharSequence is an Interface that a String implements. So, using a String is ok, because your code will still works even when the method will only work with CharSequence. Same goes for isInteger()

See this question for reference : How to convert a String to CharSequence?

I commented, because the notion of deprecated on this method got me confuse and I want to avoid that for other people.

Comments

0

Here is the an other way. if you don't like exceptions.

def strnumber = "100"
def intValue = strnumber.isInteger() ?  (strnumber as int) : null

1 Comment

I think this is the same answer as #16877253 by @Shmaperator
-1

The Simpler Way Of Converting A String To Integer In Groovy Is As Follows...

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

Now "i" Holds The Integer Value.

1 Comment

What does this add to existing answers? The accepted answer posted 9 years ago starts with: "Use the toInteger() method to conver...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.