Approach 1: Using Integer.parseInt method
public static boolean isInteger_ByParseInt(String str) {
if (str == null || str.isEmpty()) {
return false;
}
try {
Integer.parseInt(str);
return true;
} catch (NumberFormatException e) {
return false;
}
}
Approach 2: Using regular expression
public static boolean isInteger_ByRegEx(String str) {
if (str == null || str.isEmpty()) {
return false;
}
return str.matches("^-?\\d+$");
}
Approach 3: Check each characer whether it is digit or not.
public static boolean isInteger_ByCharacterCheck(String str) {
if (str == null || str.isEmpty()) {
return false;
}
int i = 0;
if (str.charAt(0) == '-') {
if (str.length() == 1) {
return false;
}
i = 1;
}
for (; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
StringUtil.java
package com.smaple.app.utils;
public class StringUtil {
public static boolean isInteger_ByParseInt(String str) {
if (str == null || str.isEmpty()) {
return false;
}
try {
Integer.parseInt(str);
return true;
} catch (NumberFormatException e) {
return false;
}
}
public static boolean isInteger_ByRegEx(String str) {
if (str == null || str.isEmpty()) {
return false;
}
return str.matches("^-?\\d+$");
}
public static boolean isInteger_ByCharacterCheck(String str) {
if (str == null || str.isEmpty()) {
return false;
}
int i = 0;
if (str.charAt(0) == '-') {
if (str.length() == 1) {
return false;
}
i = 1;
}
for (; i < str.length(); i++) {
if (!Character.isDigit(str.charAt(i))) {
return false;
}
}
return true;
}
}
StringUtilTest.java
package com.sample.app.utils;
import static com.smaple.app.utils.StringUtil.isInteger_ByCharacterCheck;
import static com.smaple.app.utils.StringUtil.isInteger_ByParseInt;
import static com.smaple.app.utils.StringUtil.isInteger_ByRegEx;
import static org.junit.Assert.*;
import org.junit.Test;
public class StringUtilTest {
@Test
public void emptyString() {
String str1 = "";
String str2 = " ";
String str3 = " ";
assertFalse(isInteger_ByParseInt(str1));
assertFalse(isInteger_ByParseInt(str2));
assertFalse(isInteger_ByParseInt(str3));
assertFalse(isInteger_ByRegEx(str1));
assertFalse(isInteger_ByRegEx(str2));
assertFalse(isInteger_ByRegEx(str3));
assertFalse(isInteger_ByCharacterCheck(str1));
assertFalse(isInteger_ByCharacterCheck(str2));
assertFalse(isInteger_ByCharacterCheck(str3));
}
@Test
public void nullString() {
String str1 = null;
assertFalse(isInteger_ByParseInt(str1));
assertFalse(isInteger_ByRegEx(str1));
assertFalse(isInteger_ByCharacterCheck(str1));
}
@Test
public void positiveNumber() {
String str1 = "1";
String str2 = "123";
assertTrue(isInteger_ByParseInt(str1));
assertTrue(isInteger_ByRegEx(str1));
assertTrue(isInteger_ByCharacterCheck(str1));
assertTrue(isInteger_ByParseInt(str2));
assertTrue(isInteger_ByRegEx(str2));
assertTrue(isInteger_ByCharacterCheck(str2));
}
@Test
public void negativeNumber() {
String str1 = "-1";
String str2 = "-123";
assertTrue(isInteger_ByParseInt(str1));
assertTrue(isInteger_ByRegEx(str1));
assertTrue(isInteger_ByCharacterCheck(str1));
assertTrue(isInteger_ByParseInt(str2));
assertTrue(isInteger_ByRegEx(str2));
assertTrue(isInteger_ByCharacterCheck(str2));
}
@Test
public void zero() {
String str1 = "0";
assertTrue(isInteger_ByParseInt(str1));
assertTrue(isInteger_ByRegEx(str1));
assertTrue(isInteger_ByCharacterCheck(str1));
}
}
Note
There is a problem with approach 1 (Using Integer.parseInt() method), it only works when Integer is in range (Between Integer.MIN_VALUE and Integer.MAX_VALUE), If the integer out of range, then this approach1 fails.
@Test
public void integerOutOfRange() {
String str1 = Integer.MAX_VALUE + "1";
assertFalse(isInteger_ByParseInt(str1));
assertTrue(isInteger_ByRegEx(str1));
assertTrue(isInteger_ByCharacterCheck(str1));
}
You may
like
No comments:
Post a Comment