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
+}

Reply via email to