From c38e6f0c1a4f3faab8dd377a4196b33d520c34c1 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 13 Mar 2020 17:07:30 +0800 Subject: [PATCH] add methods --- CHANGELOG.md | 1 + .../core/convert/AbstractConverter.java | 2 +- .../core/io/FastByteArrayOutputStream.java | 3 +- .../java/cn/hutool/core/util/CharUtil.java | 14 ++- .../cn/hutool/core/util/CharUtilTest.java | 6 ++ .../cn/hutool/http/useragent/Platform.java | 98 ++++++++++++++++--- .../hutool/http/useragent/UserAgentUtil.java | 2 + 7 files changed, 111 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f5fbcc1d..9cc2b33f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ ## 5.2.3 ### 新特性 +* 【http 】 UserAgentUtil增加识别ios和android等(issue#781@Github) ### Bug修复 * 【core 】 修复PageUtil第一页语义不明确的问题(issue#782@Github) diff --git a/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java b/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java index a6e5f5a9e..11aa91d66 100644 --- a/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java +++ b/hutool-core/src/main/java/cn/hutool/core/convert/AbstractConverter.java @@ -53,7 +53,7 @@ public abstract class AbstractConverter implements Converter, Serializable if (null == defaultValue || targetType.isInstance(defaultValue)) { if (targetType.isInstance(value) && false == Map.class.isAssignableFrom(targetType)) { // 除Map外,已经是目标类型,不需要转换(Map类型涉及参数类型,需要单独转换) - return (T) targetType.cast(value); + return targetType.cast(value); } T result = convertInternal(value); return ((null == result) ? defaultValue : result); diff --git a/hutool-core/src/main/java/cn/hutool/core/io/FastByteArrayOutputStream.java b/hutool-core/src/main/java/cn/hutool/core/io/FastByteArrayOutputStream.java index 761238575..f1b498508 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/FastByteArrayOutputStream.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/FastByteArrayOutputStream.java @@ -34,6 +34,7 @@ public class FastByteArrayOutputStream extends OutputStream { buffer = new FastByteBuffer(size); } + @SuppressWarnings("NullableProblems") @Override public void write(byte[] b, int off, int len) { buffer.append(b, off, len); @@ -52,7 +53,7 @@ public class FastByteArrayOutputStream extends OutputStream { * 此方法无任何效果,当流被关闭后不会抛出IOException */ @Override - public void close() throws IOException{ + public void close() { // nop } diff --git a/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java index 1ec229804..2d00e7c67 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/CharUtil.java @@ -244,6 +244,7 @@ public class CharUtil { * @return true表示为字符类 */ public static boolean isChar(Object value) { + //noinspection ConstantConditions return value instanceof Character || value.getClass() == char.class; } @@ -283,13 +284,14 @@ public class CharUtil { * @since 4.0.8 */ public static boolean isEmoji(char c) { + //noinspection ConstantConditions return false == ((c == 0x0) || // (c == 0x9) || // (c == 0xA) || // (c == 0xD) || // ((c >= 0x20) && (c <= 0xD7FF)) || // ((c >= 0xE000) && (c <= 0xFFFD)) || // - ((c >= 0x10000) && (c <= 0x10FFFF))); + ((c >= 0x100000) && (c <= 0x10FFFF))); } /** @@ -319,4 +321,14 @@ public class CharUtil { } return c1 == c2; } + + /** + * 获取字符类型 + * @param c 字符 + * @return 字符类型 + * @since 5.2.3 + */ + public static int getType(int c){ + return Character.getType(c); + } } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/CharUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/CharUtilTest.java index 70b5c7fe0..54c1809a8 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/CharUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/CharUtilTest.java @@ -20,4 +20,10 @@ public class CharUtilTest { Assert.assertTrue(CharUtil.isEmoji(a.charAt(1))); } + + @Test + public void isCharTest(){ + char[] a = new char[]{'a'}; + Assert.assertTrue(CharUtil.isChar(a)); + } } diff --git a/hutool-http/src/main/java/cn/hutool/http/useragent/Platform.java b/hutool-http/src/main/java/cn/hutool/http/useragent/Platform.java index e9f1ff232..1fe071b8d 100644 --- a/hutool-http/src/main/java/cn/hutool/http/useragent/Platform.java +++ b/hutool-http/src/main/java/cn/hutool/http/useragent/Platform.java @@ -7,24 +7,55 @@ import cn.hutool.core.collection.CollUtil; /** * 平台对象 - * + * * @author looly * @since 4.2.1 */ public class Platform extends UserAgentInfo { - /** 未知 */ + /** + * 未知 + */ public static final Platform Unknown = new Platform(NameUnknown, null); + /** + * Iphone + */ + public static final Platform IPHONE = new Platform("iPhone", "iphone"); + /** + * ipod + */ + public static final Platform IPOD = new Platform("iPod", "ipod"); + /** + * ipad + */ + public static final Platform IPAD = new Platform("iPad", "ipad"); + + /** + * android + */ + public static final Platform ANDROID = new Platform("Android", "android"); + /** + * android + */ + public static final Platform GOOGLE_TV = new Platform("GoogleTV", "googletv"); + + /** + * Windows Phone + */ + public static final Platform WINDOWS_PHONE = new Platform("Windows Phone", "windows (ce|phone|mobile)( os)?"); + /** * 支持的移动平台类型 */ public static final List mobilePlatforms = CollUtil.newArrayList(// - new Platform("Windows Phone", "windows (ce|phone|mobile)( os)?"), // - new Platform("iPad", "ipad"), // - new Platform("iPod", "ipod"), // - new Platform("iPhone", "iphone"), // - new Platform("Android", "android"), // + IPAD, // + IPOD, // + IPHONE, // + ANDROID, // + WINDOWS_PHONE, // + GOOGLE_TV, // + new Platform("htcFlyer", "htc_flyer"), // new Platform("Symbian", "symbian(os)?"), // new Platform("Blackberry", "blackberry") // ); @@ -32,7 +63,7 @@ public class Platform extends UserAgentInfo { /** * 支持的桌面平台类型 */ - public static final List desktopPlatforms=CollUtil.newArrayList(// + public static final List desktopPlatforms = CollUtil.newArrayList(// new Platform("Windows", "windows"), // new Platform("Mac", "(macintosh|darwin)"), // new Platform("Linux", "linux"), // @@ -40,21 +71,22 @@ public class Platform extends UserAgentInfo { new Platform("Playstation", "playstation"), // new Platform("Java", "java") // ); - + /** * 支持的平台类型 */ public static final List platforms; + static { - platforms=new ArrayList(13); + platforms = new ArrayList<>(13); platforms.addAll(mobilePlatforms); platforms.addAll(desktopPlatforms); } /** * 构造 - * - * @param name 平台名称 + * + * @param name 平台名称 * @param regex 关键字或表达式 */ public Platform(String name, String regex) { @@ -63,9 +95,51 @@ public class Platform extends UserAgentInfo { /** * 是否为移动平台 + * * @return 是否为移动平台 */ public boolean isMobile() { return mobilePlatforms.contains(this); } + + /** + * 是否为Iphone或者iPod设备 + * + * @return 是否为Iphone或者iPod设备 + * @since 5.2.3 + */ + public boolean isIPhoneOrIPod() { + return IPHONE.equals(this) || IPOD.equals(this); + } + + /** + * 是否为Iphone或者iPod设备 + * + * @return 是否为Iphone或者iPod设备 + * @since 5.2.3 + */ + public boolean isIPad() { + return IPAD.equals(this); + } + + /** + * 是否为IOS平台,包括IPhone、IPod、IPad + * + * @return 是否为IOS平台,包括IPhone、IPod、IPad + * @since 5.2.3 + */ + public boolean isIos() { + return isIPhoneOrIPod() || isIPad(); + } + + /** + * 是否为Android平台,包括Android和Google TV + * + * @return 是否为Android平台,包括Android和Google TV + * @since 5.2.3 + */ + public boolean isAndroid() { + return ANDROID.equals(this) || GOOGLE_TV.equals(this); + } + } diff --git a/hutool-http/src/main/java/cn/hutool/http/useragent/UserAgentUtil.java b/hutool-http/src/main/java/cn/hutool/http/useragent/UserAgentUtil.java index d048204d4..a5bbf451f 100644 --- a/hutool-http/src/main/java/cn/hutool/http/useragent/UserAgentUtil.java +++ b/hutool-http/src/main/java/cn/hutool/http/useragent/UserAgentUtil.java @@ -17,4 +17,6 @@ public class UserAgentUtil { public static UserAgent parse(String userAgentString) { return UserAgentParser.parse(userAgentString); } + + }