refactor: simplify ParseInteger
(#4376)
This commit is contained in:
parent
5bb54977fe
commit
58c21c5756
@ -1,6 +1,28 @@
|
|||||||
package com.thealgorithms.maths;
|
package com.thealgorithms.maths;
|
||||||
|
|
||||||
public class ParseInteger {
|
public final class ParseInteger {
|
||||||
|
private ParseInteger() {
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void checkInput(final String s) {
|
||||||
|
if (s == null) {
|
||||||
|
throw new NumberFormatException("Input parameter must not be null!");
|
||||||
|
}
|
||||||
|
if (s.isEmpty()) {
|
||||||
|
throw new NumberFormatException("Input parameter must not be empty!");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void checkDigitAt(final String s, final int pos) {
|
||||||
|
if (!Character.isDigit(s.charAt(pos))) {
|
||||||
|
throw new NumberFormatException("Input parameter of incorrect format: " + s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int digitToInt(final char digit) {
|
||||||
|
return digit - '0';
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parse a string to integer
|
* Parse a string to integer
|
||||||
*
|
*
|
||||||
@ -9,18 +31,15 @@ public class ParseInteger {
|
|||||||
* @throws NumberFormatException if the {@code string} does not contain a
|
* @throws NumberFormatException if the {@code string} does not contain a
|
||||||
* parsable integer.
|
* parsable integer.
|
||||||
*/
|
*/
|
||||||
public static int parseInt(String s) {
|
public static int parseInt(final String s) {
|
||||||
if (s == null || s.length() == 0) {
|
checkInput(s);
|
||||||
throw new NumberFormatException("Input parameter must not be null!");
|
|
||||||
}
|
final boolean isNegative = s.charAt(0) == '-';
|
||||||
boolean isNegative = s.charAt(0) == '-';
|
final boolean isPositive = s.charAt(0) == '+';
|
||||||
boolean isPositive = s.charAt(0) == '+';
|
|
||||||
int number = 0;
|
int number = 0;
|
||||||
for (int i = isNegative ? 1 : isPositive ? 1 : 0, length = s.length(); i < length; ++i) {
|
for (int i = isNegative || isPositive ? 1 : 0, length = s.length(); i < length; ++i) {
|
||||||
if (!Character.isDigit(s.charAt(i))) {
|
checkDigitAt(s, i);
|
||||||
throw new NumberFormatException("Input parameter of incorrect format: " + s);
|
number = number * 10 + digitToInt(s.charAt(i));
|
||||||
}
|
|
||||||
number = number * 10 + s.charAt(i) - '0';
|
|
||||||
}
|
}
|
||||||
return isNegative ? -number : number;
|
return isNegative ? -number : number;
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ import org.junit.jupiter.api.Test;
|
|||||||
*/
|
*/
|
||||||
public class ParseIntegerTest {
|
public class ParseIntegerTest {
|
||||||
private static final String NULL_PARAMETER_MESSAGE = "Input parameter must not be null!";
|
private static final String NULL_PARAMETER_MESSAGE = "Input parameter must not be null!";
|
||||||
|
private static final String EMPTY_PARAMETER_MESSAGE = "Input parameter must not be empty!";
|
||||||
private static final String INCORRECT_FORMAT_MESSAGE = "Input parameter of incorrect format";
|
private static final String INCORRECT_FORMAT_MESSAGE = "Input parameter of incorrect format";
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -16,6 +17,12 @@ public class ParseIntegerTest {
|
|||||||
Assertions.assertEquals(exception.getMessage(), NULL_PARAMETER_MESSAGE);
|
Assertions.assertEquals(exception.getMessage(), NULL_PARAMETER_MESSAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testEmptyInput() {
|
||||||
|
IllegalArgumentException exception = Assertions.assertThrows(IllegalArgumentException.class, () -> ParseInteger.parseInt(""));
|
||||||
|
Assertions.assertEquals(exception.getMessage(), EMPTY_PARAMETER_MESSAGE);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testInputOfIncorrectFormat() {
|
public void testInputOfIncorrectFormat() {
|
||||||
IllegalArgumentException exception = Assertions.assertThrows(NumberFormatException.class, () -> ParseInteger.parseInt("+0a123"));
|
IllegalArgumentException exception = Assertions.assertThrows(NumberFormatException.class, () -> ParseInteger.parseInt("+0a123"));
|
||||||
|
Loading…
Reference in New Issue
Block a user