Merge branch 'master' of https://github.com/nickwongwong/commons-text
diff --git a/src/main/java/org/apache/commons/text/lookup/AbstractStringLookup.java b/src/main/java/org/apache/commons/text/lookup/AbstractStringLookup.java
index e3c44e9..4dbdb65 100644
--- a/src/main/java/org/apache/commons/text/lookup/AbstractStringLookup.java
+++ b/src/main/java/org/apache/commons/text/lookup/AbstractStringLookup.java
@@ -24,8 +24,20 @@
  */
 abstract class AbstractStringLookup implements StringLookup {
 
+
+    /**
+     * The empty string.
+     */
     private static final String EMPTY = "";
+
+    /**
+     * The default split char.
+     */
     protected static final char SPLIT_CH = ':';
+
+    /**
+     * The default split string.
+     */
     protected static final String SPLIT_STR = String.valueOf(SPLIT_CH);
 
     /**
diff --git a/src/main/java/org/apache/commons/text/lookup/ScriptStringLookup.java b/src/main/java/org/apache/commons/text/lookup/ScriptStringLookup.java
index 4705d31..c80e88c 100644
--- a/src/main/java/org/apache/commons/text/lookup/ScriptStringLookup.java
+++ b/src/main/java/org/apache/commons/text/lookup/ScriptStringLookup.java
@@ -78,8 +78,8 @@
             final Object eval = scriptEngine.eval(script);
             return Objects.toString(eval, null);
         } catch (final Exception e) {
-            throw IllegalArgumentExceptions.format(e, "Error looking up script engine [%s] for script [%s].", engineName,
-                    script);
+            throw IllegalArgumentExceptions.format(e, "Error looking up script engine [%s] for script [%s].",
+                engineName, script);
         }
     }
 
diff --git a/src/main/java/org/apache/commons/text/lookup/StringLookupFactory.java b/src/main/java/org/apache/commons/text/lookup/StringLookupFactory.java
index 2b6f856..dcf599d 100644
--- a/src/main/java/org/apache/commons/text/lookup/StringLookupFactory.java
+++ b/src/main/java/org/apache/commons/text/lookup/StringLookupFactory.java
@@ -67,6 +67,7 @@
      * </ul>
      *
      * @param stringLookupMap
+     *            the map of string lookups.
      * @since 1.5
      */
     public void addDefaultStringLookups(final Map<String, StringLookup> stringLookupMap) {
diff --git a/src/main/java/org/apache/commons/text/lookup/UrlStringLookup.java b/src/main/java/org/apache/commons/text/lookup/UrlStringLookup.java
index 29e894e..1c27736 100644
--- a/src/main/java/org/apache/commons/text/lookup/UrlStringLookup.java
+++ b/src/main/java/org/apache/commons/text/lookup/UrlStringLookup.java
@@ -72,8 +72,9 @@
         final String urlStr = substringAfter(key, SPLIT_CH);
         try {
             final URL url = new URL(urlStr);
-            final StringWriter writer = new StringWriter(8192);
-            final char[] buffer = new char[8192];
+            final int size = 8192;
+            final StringWriter writer = new StringWriter(size);
+            final char[] buffer = new char[size];
             try (InputStreamReader reader = new InputStreamReader(new BufferedInputStream(url.openStream()),
                     charsetName)) {
                 int n;
diff --git a/src/main/java/org/apache/commons/text/similarity/JaccardSimilarity.java b/src/main/java/org/apache/commons/text/similarity/JaccardSimilarity.java
index 1dc2b85..2e88dd2 100644
--- a/src/main/java/org/apache/commons/text/similarity/JaccardSimilarity.java
+++ b/src/main/java/org/apache/commons/text/similarity/JaccardSimilarity.java
@@ -62,27 +62,22 @@
      * @return index
      */
     private Double calculateJaccardSimilarity(final CharSequence left, final CharSequence right) {
-        final Set<String> intersectionSet = new HashSet<>();
-        final Set<String> unionSet = new HashSet<>();
-        boolean unionFilled = false;
         final int leftLength = left.length();
         final int rightLength = right.length();
         if (leftLength == 0 || rightLength == 0) {
             return 0d;
         }
-
-        for (int leftIndex = 0; leftIndex < leftLength; leftIndex++) {
-            unionSet.add(String.valueOf(left.charAt(leftIndex)));
-            for (int rightIndex = 0; rightIndex < rightLength; rightIndex++) {
-                if (!unionFilled) {
-                    unionSet.add(String.valueOf(right.charAt(rightIndex)));
-                }
-                if (left.charAt(leftIndex) == right.charAt(rightIndex)) {
-                    intersectionSet.add(String.valueOf(left.charAt(leftIndex)));
-                }
-            }
-            unionFilled = true;
+        final Set<Character> leftSet = new HashSet<>();
+        for (int i = 0; i < leftLength; i++) {
+            leftSet.add(left.charAt(i));
         }
-        return Double.valueOf(intersectionSet.size()) / Double.valueOf(unionSet.size());
+        final Set<Character> rightSet = new HashSet<>();
+        for (int i = 0; i < rightLength; i++) {
+            rightSet.add(right.charAt(i));
+        }
+        final Set<Character> unionSet = new HashSet<>(leftSet);
+        unionSet.addAll(rightSet);
+        final int intersectionSize = leftSet.size() + rightSet.size() - unionSet.size();
+        return 1.0d * intersectionSize / unionSet.size();
     }
 }
diff --git a/src/test/resources/document.properties b/src/test/resources/document.properties
index f411d5e..2f3bc8c 100644
--- a/src/test/resources/document.properties
+++ b/src/test/resources/document.properties
@@ -13,4 +13,4 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-mykey = Hello World!
\ No newline at end of file
+mykey = Hello World!