From 5ae3ba2760d8f1d190f4c20c60aba75388adbe09 Mon Sep 17 00:00:00 2001 From: Jared Davis Date: Wed, 10 Jun 2026 14:55:37 -0400 Subject: [PATCH 1/3] Block Integer parsing of a string if it contains a decimal point. --- src/main/java/org/scijava/parsington/Literals.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/scijava/parsington/Literals.java b/src/main/java/org/scijava/parsington/Literals.java index bd679da..7ff9631 100644 --- a/src/main/java/org/scijava/parsington/Literals.java +++ b/src/main/java/org/scijava/parsington/Literals.java @@ -407,8 +407,9 @@ public static Number parseDecimal(final CharSequence s, final Position pos) { final boolean forceLong = "l".equalsIgnoreCase(force); final boolean forceFloat = "f".equalsIgnoreCase(force); final boolean forceDouble = "d".equalsIgnoreCase(force); + final int dot = number.indexOf("."); Number result = null; - if (!forceFloat && !forceDouble) { + if ((dot == -1) && !forceFloat && !forceDouble) { result = parseInteger(number, forceLong, 10); } if (result == null && !forceLong) { From fe4771e91c9c8c60224daa770a344dfc44965929 Mon Sep 17 00:00:00 2001 From: Jared Davis Date: Fri, 12 Jun 2026 12:58:35 -0400 Subject: [PATCH 2/3] Use output from matcher group 3 instead of indexOf --- src/main/java/org/scijava/parsington/Literals.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/org/scijava/parsington/Literals.java b/src/main/java/org/scijava/parsington/Literals.java index 7ff9631..52172c0 100644 --- a/src/main/java/org/scijava/parsington/Literals.java +++ b/src/main/java/org/scijava/parsington/Literals.java @@ -407,9 +407,8 @@ public static Number parseDecimal(final CharSequence s, final Position pos) { final boolean forceLong = "l".equalsIgnoreCase(force); final boolean forceFloat = "f".equalsIgnoreCase(force); final boolean forceDouble = "d".equalsIgnoreCase(force); - final int dot = number.indexOf("."); Number result = null; - if ((dot == -1) && !forceFloat && !forceDouble) { + if ((m.start(3) == -1) && !forceFloat && !forceDouble) { result = parseInteger(number, forceLong, 10); } if (result == null && !forceLong) { From e323c0a0da3405efe1b419416e1ebba0ddacaabe Mon Sep 17 00:00:00 2001 From: Curtis Rueden Date: Fri, 17 Jul 2026 17:46:12 -0500 Subject: [PATCH 3/3] Generalize the integer smell test a bit If group 4 is non-null, it means an exponent part was found. --- src/main/java/org/scijava/parsington/Literals.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/scijava/parsington/Literals.java b/src/main/java/org/scijava/parsington/Literals.java index 52172c0..f1c9ecd 100644 --- a/src/main/java/org/scijava/parsington/Literals.java +++ b/src/main/java/org/scijava/parsington/Literals.java @@ -408,7 +408,8 @@ public static Number parseDecimal(final CharSequence s, final Position pos) { final boolean forceFloat = "f".equalsIgnoreCase(force); final boolean forceDouble = "d".equalsIgnoreCase(force); Number result = null; - if ((m.start(3) == -1) && !forceFloat && !forceDouble) { + if (m.group(3) == null && m.group(4) == null && !forceFloat && !forceDouble) { + // No decimal point and no exponent part. So this *might* be an integer! result = parseInteger(number, forceLong, 10); } if (result == null && !forceLong) {