diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/FileMagicNumber.java b/hutool-core/src/main/java/cn/hutool/core/io/file/FileMagicNumber.java index bbdde0d0f..8cc7f343f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/file/FileMagicNumber.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/FileMagicNumber.java @@ -1141,17 +1141,18 @@ public enum FileMagicNumber { @Override public boolean match(final byte[] bytes) { final byte[] byte1 = new byte[]{(byte) 0xd0, (byte) 0xcf, (byte) 0x11, (byte) 0xe0, (byte) 0xa1, (byte) 0xb1, (byte) 0x1a, (byte) 0xe1}; - final boolean flag1 = bytes.length > 515 && Arrays.equals(Arrays.copyOfRange(bytes, 0, 8), byte1); - if (flag1) { + if (bytes.length > 515 && ArrayUtil.isSubEquals(bytes, 0, byte1)) { final byte[] byte2 = new byte[]{(byte) 0xec, (byte) 0xa5, (byte) 0xc1, (byte) 0x00}; - final boolean flag2 = Arrays.equals(Arrays.copyOfRange(bytes, 512, 516), byte2); + // check 512:516 + if(ArrayUtil.isSubEquals(bytes, 512, byte2)){ + return true; + } final byte[] byte3 = new byte[]{(byte) 0x00, (byte) 0x0a, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x4d, (byte) 0x53, (byte) 0x57, (byte) 0x6f, (byte) 0x72, (byte) 0x64 , (byte) 0x44, (byte) 0x6f, (byte) 0x63, (byte) 0x00, (byte) 0x10, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x57, (byte) 0x6f, (byte) 0x72, (byte) 0x64, (byte) 0x2e, (byte) 0x44, (byte) 0x6f, (byte) 0x63, (byte) 0x75, (byte) 0x6d, (byte) 0x65, (byte) 0x6e, (byte) 0x74, (byte) 0x2e, (byte) 0x38, (byte) 0x00, (byte) 0xf4, (byte) 0x39, (byte) 0xb2, (byte) 0x71}; final byte[] range = Arrays.copyOfRange(bytes, 2075, 2142); - final boolean flag3 = bytes.length > 2142 && FileMagicNumber.indexOf(range, byte3) > 0; - return flag2 || flag3; + return bytes.length > 2142 && FileMagicNumber.indexOf(range, byte3) > 0; } return false; } diff --git a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java index 5ea16b435..3c2298207 100755 --- a/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/text/CharSequenceUtil.java @@ -1023,7 +1023,7 @@ public class CharSequenceUtil extends StrChecker { if (null == str || ArrayUtil.isEmpty(chars)) { return str(str); } - return filter(str, (c)-> false == ArrayUtil.contains(chars, c)); + return filter(str, (c) -> false == ArrayUtil.contains(chars, c)); } /** @@ -2052,16 +2052,16 @@ public class CharSequenceUtil extends StrChecker { * 任意一个字符串为null返回false * * @param str1 第一个字符串 - * @param start1 第一个字符串开始的位置 + * @param offset1 第一个字符串开始的位置 * @param str2 第二个字符串 * @param ignoreCase 是否忽略大小写 * @return 子串是否相同 * @see String#regionMatches(boolean, int, String, int, int) * @since 3.2.1 */ - public static boolean isSubEquals(final CharSequence str1, final int start1, + public static boolean isSubEquals(final CharSequence str1, final int offset1, final CharSequence str2, final boolean ignoreCase) { - return isSubEquals(str1, start1, str2, 0, str2.length(), ignoreCase); + return isSubEquals(str1, offset1, str2, 0, str2.length(), ignoreCase); } /** @@ -2069,23 +2069,23 @@ public class CharSequenceUtil extends StrChecker { * 任意一个字符串为null返回false * * @param str1 第一个字符串 - * @param start1 第一个字符串开始的位置 + * @param offset1 第一个字符串开始的位置 * @param str2 第二个字符串 - * @param start2 第二个字符串开始的位置 + * @param offset2 第二个字符串开始的位置 * @param length 截取长度 * @param ignoreCase 是否忽略大小写 * @return 子串是否相同 * @see String#regionMatches(boolean, int, String, int, int) * @since 3.2.1 */ - public static boolean isSubEquals(final CharSequence str1, final int start1, - final CharSequence str2, final int start2, final int length, + public static boolean isSubEquals(final CharSequence str1, final int offset1, + final CharSequence str2, final int offset2, final int length, final boolean ignoreCase) { if (null == str1 || null == str2) { return false; } - return str1.toString().regionMatches(ignoreCase, start1, str2.toString(), start2, length); + return str1.toString().regionMatches(ignoreCase, offset1, str2.toString(), offset2, length); } // endregion diff --git a/hutool-core/src/main/java/cn/hutool/core/util/PrimitiveArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/PrimitiveArrayUtil.java index 13cfe610a..070ef5c8c 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/PrimitiveArrayUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/PrimitiveArrayUtil.java @@ -31,6 +31,7 @@ public class PrimitiveArrayUtil { public static final int INDEX_NOT_FOUND = -1; // region ----- isEmpty + /** * 数组是否为空 * @@ -3139,6 +3140,7 @@ public class PrimitiveArrayUtil { // endregion // region ----- startWith + /** * array数组是否以prefix开头 *