diff --git a/core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java b/core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java new file mode 100644 index 0000000000..03d77c2aea --- /dev/null +++ b/core-java-modules/core-java-string-conversions/src/main/java/com/baeldung/stringtoint/StringToIntConverter.java @@ -0,0 +1,52 @@ +package com.baeldung.stringtoint; + +import java.util.Optional; +import org.apache.commons.lang3.math.NumberUtils; + +public class StringToIntConverter { + + private StringToIntConverter() { + } + + public static Integer convertStringToIntUsingIntegerParseInt(String input){ + try { + return Integer.parseInt(input); + } catch (NumberFormatException e) { + // log or handle the error + return Integer.MIN_VALUE; + } + } + + public static Integer convertStringToIntUsingIntegerValueOf(String input){ + try { + return Integer.valueOf(input); + } catch (NumberFormatException e) { + // log or handle the error + return Integer.MIN_VALUE; + } + } + + public static Integer convertStringToIntUsingIntegerDecode(String input){ + try { + return Integer.decode(input); + } catch (Exception e) { + // log or handle the error + return Integer.MIN_VALUE; + } + } + + public static Integer convertStringToIntUsingOptional(String input){ + Optional parsedInt; + try { + parsedInt = Optional.of(Integer.parseInt(input)); + } catch (Exception e) { + // log or handle the error + parsedInt = Optional.empty(); + } + return parsedInt.orElse(Integer.MIN_VALUE); + } + + public static int convertStringToIntUsingNumberUtils(String input){ + return NumberUtils.toInt(input, Integer.MIN_VALUE); + } +} diff --git a/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java b/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java new file mode 100644 index 0000000000..2bfb4db161 --- /dev/null +++ b/core-java-modules/core-java-string-conversions/src/test/java/com/baeldung/stringtoint/StringToIntConverterUnitTest.java @@ -0,0 +1,53 @@ +package com.baeldung.stringtoint; + +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +class StringToIntConverterUnitTest { + + @Test + void whenConvertingIntToString_thenInvalidCasesReturnIntegerMinValue() { + List testData = Arrays.asList( + new TestData("", Integer.MIN_VALUE), + new TestData(null, Integer.MIN_VALUE), + new TestData("23,56", Integer.MIN_VALUE), + new TestData("2147483648", Integer.MIN_VALUE), + new TestData("-2147483649", Integer.MIN_VALUE), + new TestData("hello", Integer.MIN_VALUE) + ); + testData.forEach(data -> { + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerParseInt(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerValueOf(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingOptional(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerDecode(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingNumberUtils(data.input)); + }); + } + + @Test + void whenConvertingIntToString_thenValidCasesReturnUnboxedInt() { + List testData = Arrays.asList( + new TestData("23", 23), + new TestData("-23", -23) + ); + testData.forEach(data -> { + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerParseInt(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerValueOf(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingOptional(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingNumberUtils(data.input)); + Assertions.assertEquals(data.expectedOutput, StringToIntConverter.convertStringToIntUsingIntegerDecode(data.input)); + }); + } + + public static class TestData{ + String input; + Integer expectedOutput; + + TestData(String input, Integer expectedOutput){ + this.input = input; + this.expectedOutput = expectedOutput; + } + } +} \ No newline at end of file