From e3c936978b5b79cef6b937ab0cedf208d80da714 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 18 Jun 2019 20:35:42 +0800 Subject: fix crash --- src/main/java/me/shedaniel/rei/client/SearchArgument.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'src/main') diff --git a/src/main/java/me/shedaniel/rei/client/SearchArgument.java b/src/main/java/me/shedaniel/rei/client/SearchArgument.java index 59ba0e0be..3e8a34ddb 100644 --- a/src/main/java/me/shedaniel/rei/client/SearchArgument.java +++ b/src/main/java/me/shedaniel/rei/client/SearchArgument.java @@ -30,20 +30,23 @@ public class SearchArgument { } public static int boyerMooreHorspoolSearch(CharSequence pattern, CharSequence text) { + int patternLength = pattern.length(); + if (patternLength == 0) + return 0; int shift[] = new int[256]; for(int k = 0; k < 256; k++) - shift[k] = pattern.length(); - for(int k = 0; k < pattern.length() - 1; k++) - shift[pattern.charAt(k)] = pattern.length() - 1 - k; + shift[k] = patternLength; + for(int k = 0; k < patternLength - 1; k++) + shift[pattern.charAt(k)] = patternLength - 1 - k; int i = 0, j = 0; - while ((i + pattern.length()) <= text.length()) { - j = pattern.length() - 1; + while ((i + patternLength) <= text.length()) { + j = patternLength - 1; while (text.charAt(i + j) == pattern.charAt(j)) { j -= 1; if (j < 0) return i; } - i = i + shift[text.charAt(i + pattern.length() - 1)]; + i = i + shift[text.charAt(i + patternLength - 1)]; } return -1; } -- cgit