From c6786a3e728eab995accb64f025d301e3d516987 Mon Sep 17 00:00:00 2001 From: "robert.sloss" Date: Thu, 22 Nov 2018 13:43:37 +0000 Subject: [PATCH] Now separates numbers appearing in sentence --- src/com/googlecode/yatspec/parsing/Text.java | 11 ++++++++++- test/com/googlecode/yatspec/parsing/TextTest.java | 6 ++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/com/googlecode/yatspec/parsing/Text.java b/src/com/googlecode/yatspec/parsing/Text.java index 1ed9e69c..3f57bf03 100644 --- a/src/com/googlecode/yatspec/parsing/Text.java +++ b/src/com/googlecode/yatspec/parsing/Text.java @@ -11,9 +11,17 @@ public class Text { private static final Regex wordDelimiter = Regex.regex(Strings.toString(Text.class.getResourceAsStream("wordDelimiter.regex"))); + private static final Regex wordNumberDelimiter = Regex.regex("([a-z])([0-9])"); // detect boundaries where letters meet numbers private static final Pattern spaceRemover = Pattern.compile("(? wordNumberDelimiterReplacer = new Callable1() { + public String call(MatchResult matchResult) { + // for example "d4" -> "d 4" + return matchResult.group(1) + " " + matchResult.group(2); + } + }; + private static final Callable1 wordDelimiterReplacer = new Callable1() { public String call(MatchResult matchResult) { // " $1 $2" @@ -27,7 +35,8 @@ private static String filterNull(String value) { private static final Callable1 wordifier = new Callable1() { public CharSequence call(CharSequence text) { - return wordDelimiter.findMatches(text).replace(wordDelimiterReplacer); + String wordified = wordDelimiter.findMatches(text).replace(wordDelimiterReplacer); + return wordNumberDelimiter.findMatches(wordified).replace(wordNumberDelimiterReplacer); } }; diff --git a/test/com/googlecode/yatspec/parsing/TextTest.java b/test/com/googlecode/yatspec/parsing/TextTest.java index 74aaa453..802adbbc 100644 --- a/test/com/googlecode/yatspec/parsing/TextTest.java +++ b/test/com/googlecode/yatspec/parsing/TextTest.java @@ -6,6 +6,12 @@ import static org.hamcrest.Matchers.is; public class TextTest { + + @Test + public void numberAfterWordHasASpace() { + assertThat(Text.wordify("word404NewWord"), is("Word 404 new word")); + } + @Test public void insertsASingleSpacesBetweenCapitalsAndTrims() { assertThat(Text.wordify("replaceAWithB;"), is("Replace a with b"));