Merge pull request #3007 from zzzj1233/v5-dev

Feat: NumberUtil重载parseXXX方法, 解析失败返回默认值, 代替抛出异常
This commit is contained in:
Golden Looly
2023-03-23 23:52:16 +08:00
committed by GitHub
4 changed files with 353 additions and 0 deletions

View File

@@ -160,4 +160,53 @@ public class CharSequenceUtilTest {
a = null;
Assert.assertNull(CharSequenceUtil.trimToNull(a));
}
@Test
public void commonPrefixTest() throws Exception{
// -------------------------- None match -----------------------
Assert.assertEquals("", CharSequenceUtil.commonPrefix("", "abc"));
Assert.assertEquals("", CharSequenceUtil.commonPrefix(null, "abc"));
Assert.assertEquals("", CharSequenceUtil.commonPrefix("abc", null));
Assert.assertEquals("", CharSequenceUtil.commonPrefix("abc", ""));
Assert.assertEquals("", CharSequenceUtil.commonPrefix("azzzj", "bzzzj"));
Assert.assertEquals("", CharSequenceUtil.commonPrefix("english中文", "french中文"));
// -------------------------- Matched -----------------------
Assert.assertEquals("name_", CharSequenceUtil.commonPrefix("name_abc", "name_efg"));
Assert.assertEquals("zzzj", CharSequenceUtil.commonPrefix("zzzja", "zzzjb"));
Assert.assertEquals("中文", CharSequenceUtil.commonPrefix("中文english", "中文french"));
}
@Test
public void commonSuffixTest() throws Exception{
// -------------------------- None match -----------------------
Assert.assertEquals("", CharSequenceUtil.commonSuffix("", "abc"));
Assert.assertEquals("", CharSequenceUtil.commonSuffix(null, "abc"));
Assert.assertEquals("", CharSequenceUtil.commonSuffix("abc", null));
Assert.assertEquals("", CharSequenceUtil.commonSuffix("abc", ""));
Assert.assertEquals("", CharSequenceUtil.commonSuffix("zzzja", "zzzjb"));
Assert.assertEquals("", CharSequenceUtil.commonSuffix("中文english", "中文Korean"));
// -------------------------- Matched -----------------------
Assert.assertEquals("_name", CharSequenceUtil.commonSuffix("abc_name", "efg_name"));
Assert.assertEquals("zzzj", CharSequenceUtil.commonSuffix("abczzzj", "efgzzzj"));
Assert.assertEquals("中文", CharSequenceUtil.commonSuffix("english中文", "Korean中文"));
}
}

View File

@@ -10,6 +10,12 @@ import java.math.BigInteger;
import java.math.RoundingMode;
import java.util.Set;
import static cn.hutool.core.util.NumberUtil.parseDouble;
import static cn.hutool.core.util.NumberUtil.parseFloat;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
/**
* {@link NumberUtil} 单元测试类
*
@@ -296,6 +302,23 @@ public class NumberUtilTest {
Assert.assertEquals(0, v1);
}
@Test
public void parseIntTest4() {
// -------------------------- Parse failed -----------------------
assertThat(NumberUtil.parseInt("abc", null), nullValue());
assertThat(NumberUtil.parseInt("abc", 456), equalTo(456));
// -------------------------- Parse success -----------------------
assertThat(NumberUtil.parseInt("123.abc", 789), equalTo(123));
assertThat(NumberUtil.parseInt("123.3", null), equalTo(123));
}
@Test(expected = NumberFormatException.class)
public void parseNumberTest4(){
// issue#I5M55F
@@ -324,6 +347,29 @@ public class NumberUtilTest {
Assert.assertTrue(number instanceof BigDecimal);
}
@Test
public void parseNumberTest3(){
// -------------------------- Parse failed -----------------------
assertThat(NumberUtil.parseNumber("abc", null), nullValue());
assertThat(NumberUtil.parseNumber(StrUtil.EMPTY, null), nullValue());
assertThat(NumberUtil.parseNumber(StrUtil.repeat(StrUtil.SPACE, 10), null), nullValue());
assertThat(NumberUtil.parseNumber("abc", 456).intValue(), equalTo(456));
// -------------------------- Parse success -----------------------
assertThat(NumberUtil.parseNumber("123.abc", 789).intValue(), equalTo(123));
assertThat(NumberUtil.parseNumber("123.3", null).doubleValue(), equalTo(123.3D));
assertThat(NumberUtil.parseNumber("0.123.3", null).doubleValue(), equalTo(0.123D));
}
@Test
public void parseHexNumberTest() {
// 千位分隔符去掉
@@ -362,6 +408,69 @@ public class NumberUtilTest {
Assert.assertEquals(0, number);
}
@Test
public void parseLongTest2() {
// -------------------------- Parse failed -----------------------
Long v1 = NumberUtil.parseLong(null, null);
assertThat(v1, nullValue());
Long v2 = NumberUtil.parseLong(StrUtil.EMPTY, null);
assertThat(v2, nullValue());
Long v3 = NumberUtil.parseLong("L3221", 1233L);
assertThat(v3, equalTo(1233L));
// -------------------------- Parse success -----------------------
Long v4 = NumberUtil.parseLong("1233L", null);
assertThat(v4, equalTo(1233L));
}
@Test
public void parseFloatTest() throws Exception {
// -------------------------- Parse failed -----------------------
assertThat(parseFloat("abc", null), nullValue());
assertThat(parseFloat("a123.33", null), nullValue());
assertThat(parseFloat("..123", null), nullValue());
assertThat(parseFloat(StrUtil.EMPTY, 1233F), equalTo(1233F));
// -------------------------- Parse success -----------------------
assertThat(parseFloat("123.33a", null), equalTo(123.33F));
assertThat(parseFloat(".123", null), equalTo(0.123F));
}
@Test
public void parseDoubleTest() throws Exception {
// -------------------------- Parse failed -----------------------
assertThat(parseDouble("abc", null), nullValue());
assertThat(parseDouble("a123.33", null), nullValue());
assertThat(parseDouble("..123", null), nullValue());
assertThat(parseDouble(StrUtil.EMPTY, 1233D), equalTo(1233D));
// -------------------------- Parse success -----------------------
assertThat(parseDouble("123.33a", null), equalTo(123.33D));
assertThat(parseDouble(".123", null), equalTo(0.123D));
}
@Test
public void factorialTest(){
long factorial = NumberUtil.factorial(0);