This is an automated email from the ASF dual-hosted git repository. orpiske pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit dbf79132760ea291ed1112487876e320fec33a35 Author: Otavio Rodolfo Piske <angusyo...@gmail.com> AuthorDate: Wed Oct 25 09:04:00 2023 +0200 (chores) camel-core: avoid checking for the first char during the loop --- .../org/apache/camel/support/ObjectHelper.java | 56 ++++++++++++++-------- .../org/apache/camel/support/ObjectHelperTest.java | 14 +++++- 2 files changed, 48 insertions(+), 22 deletions(-) diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ObjectHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/ObjectHelper.java index fbbd3512957..8d18cd513d8 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/ObjectHelper.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/ObjectHelper.java @@ -343,45 +343,61 @@ public final class ObjectHelper { * Checks whether the text is an integer number */ public static boolean isNumber(String text) { - if (text == null || text.isEmpty()) { - return false; - } - if (text.equals("-")) { + final int startPos = findStartPosition(text); + if (startPos < 0) { return false; } - for (int i = 0; i < text.length(); i++) { + + for (int i = startPos; i < text.length(); i++) { char ch = text.charAt(i); - if (i == 0 && ch == '-') { - // skip leading negative - } else if (!Character.isDigit(ch)) { + if (!Character.isDigit(ch)) { return false; } } return true; } + private static int findStartPosition(String text) { + if (text == null || text.isEmpty()) { + // invalid + return -1; + } + + int startPos = 0; + if (text.charAt(0) == '-') { + if (text.length() == 1) { + // invalid + return -1; + } + + // skip leading negative + startPos = 1; + } + + return startPos; + } + /** * Checks whether the text is a float point number */ public static boolean isFloatingNumber(String text) { - if (text == null || text.isEmpty()) { - return false; - } - if (text.equals("-")) { + final int startPos = findStartPosition(text); + if (startPos < 0) { return false; } + boolean dots = false; - for (int i = 0; i < text.length(); i++) { + for (int i = startPos; i < text.length(); i++) { char ch = text.charAt(i); - if (i == 0 && ch == '-') { - // skip leading negative - } else if (ch == '.') { - if (dots) { + if (!Character.isDigit(ch)) { + if (ch == '.') { + if (dots) { + return false; + } + dots = true; + } else { return false; } - dots = true; - } else if (!Character.isDigit(ch)) { - return false; } } return true; diff --git a/core/camel-support/src/test/java/org/apache/camel/support/ObjectHelperTest.java b/core/camel-support/src/test/java/org/apache/camel/support/ObjectHelperTest.java index 44797ee904e..2f9ae2bf9a4 100644 --- a/core/camel-support/src/test/java/org/apache/camel/support/ObjectHelperTest.java +++ b/core/camel-support/src/test/java/org/apache/camel/support/ObjectHelperTest.java @@ -76,7 +76,7 @@ class ObjectHelperTest { void isFloatingNumberNonNumeric() { assertFalse(ObjectHelper.isFloatingNumber("ABC")); assertFalse(ObjectHelper.isFloatingNumber("-ABC")); - assertFalse(ObjectHelper.isFloatingNumber("ABC.0"));; + assertFalse(ObjectHelper.isFloatingNumber("ABC.0")); assertFalse(ObjectHelper.isFloatingNumber("-ABC.0")); assertFalse(ObjectHelper.isFloatingNumber("!@#$#$%@#$%")); // TODO: fix ... currently it returns true for this @@ -102,6 +102,16 @@ class ObjectHelperTest { assertTrue(ObjectHelper.isFloatingNumber("0.0")); } + @Test + @DisplayName("Tests that isFloatingNumber returns true for invalid floats") + void isFloatingNumberInvalidFloats() { + assertFalse(ObjectHelper.isFloatingNumber("12..34")); + assertFalse(ObjectHelper.isFloatingNumber("-12..34")); + assertFalse(ObjectHelper.isFloatingNumber("1..0")); + assertFalse(ObjectHelper.isFloatingNumber("0..0")); + assertFalse(ObjectHelper.isFloatingNumber("..")); + } + @Test @DisplayName("Tests that isFloatingNumber returns false for valid floats using comma instead of dot") void isFloatingNumberFloatsWithComma() { @@ -110,4 +120,4 @@ class ObjectHelperTest { assertFalse(ObjectHelper.isFloatingNumber("1,0")); assertFalse(ObjectHelper.isFloatingNumber("0,0")); } -} \ No newline at end of file +}