add methods

This commit is contained in:
Looly 2020-03-13 17:07:30 +08:00
parent a508f2d5aa
commit c38e6f0c1a
7 changed files with 111 additions and 15 deletions

View File

@ -6,6 +6,7 @@
## 5.2.3
### 新特性
* 【http 】 UserAgentUtil增加识别ios和android等issue#781@Github
### Bug修复
* 【core 】 修复PageUtil第一页语义不明确的问题issue#782@Github

View File

@ -53,7 +53,7 @@ public abstract class AbstractConverter<T> implements Converter<T>, 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);

View File

@ -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
}

View File

@ -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);
}
}

View File

@ -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));
}
}

View File

@ -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<Platform> 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<Platform> desktopPlatforms=CollUtil.newArrayList(//
public static final List<Platform> 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<Platform> platforms;
static {
platforms=new ArrayList<Platform>(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平台包括IPhoneIPodIPad
*
* @return 是否为IOS平台包括IPhoneIPodIPad
* @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);
}
}

View File

@ -17,4 +17,6 @@ public class UserAgentUtil {
public static UserAgent parse(String userAgentString) {
return UserAgentParser.parse(userAgentString);
}
}