Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
C
common
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
曲欣亮
common
Commits
5b04f123
Commit
5b04f123
authored
Apr 14, 2019
by
张永
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
加个方法
parent
793adda4
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
1109 additions
and
1093 deletions
+1109
-1093
StringUtil.java
src/main/java/com/egolm/common/StringUtil.java
+1109
-1093
No files found.
src/main/java/com/egolm/common/StringUtil.java
View file @
5b04f123
package
com
.
egolm
.
common
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.io.PrintWriter
;
import
java.io.Reader
;
import
java.io.UnsupportedEncodingException
;
import
java.io.Writer
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.TreeMap
;
import
java.util.UUID
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
javax.crypto.Mac
;
import
javax.crypto.SecretKey
;
import
javax.crypto.spec.SecretKeySpec
;
import
org.apache.commons.codec.DecoderException
;
import
org.apache.commons.codec.binary.Base64
;
import
org.apache.commons.codec.binary.Hex
;
import
com.egolm.common.exception.CharsetException
;
import
com.egolm.common.exception.MD5Exception
;
import
com.egolm.common.exception.PluginException
;
import
com.egolm.common.exception.ReflectException
;
import
com.egolm.common.exception.SHA1Exception
;
import
net.sourceforge.pinyin4j.PinyinHelper
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinCaseType
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinToneType
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinVCharType
;
import
net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination
;
/**
*
* @Description 字符串工具类
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
*/
public
class
StringUtil
{
public
static
String
join
(
Map
<
String
,
Object
>
map
,
String
sign
,
String
before
,
String
after
,
String
joinKey
)
{
sign
=
sign
==
null
?
""
:
sign
;
before
=
before
==
null
?
""
:
before
;
after
=
after
==
null
?
""
:
after
;
List
<
String
>
strs
=
new
ArrayList
<
String
>();
for
(
String
key
:
map
.
keySet
())
{
StringBuffer
sbuffer
=
new
StringBuffer
();
sbuffer
.
append
(
key
).
append
(
joinKey
);
sbuffer
.
append
(
StringUtil
.
format
(
map
.
get
(
key
)));
strs
.
add
(
sbuffer
.
toString
());
}
return
StringUtil
.
join
(
sign
,
before
,
after
,
strs
);
}
public
static
String
join
(
String
sign
,
Collection
<
String
>
strs
)
{
return
join
(
sign
,
""
,
""
,
strs
.
toArray
(
new
String
[
strs
.
size
()]));
}
/**
*
* @Description 连接字符串
* @param sign 连接符
* @param before 前置字符串
* @param strs 要连接的字符串集合
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
join
(
String
sign
,
String
before
,
Collection
<
String
>
strs
)
{
return
join
(
sign
,
before
,
""
,
strs
.
toArray
(
new
String
[
strs
.
size
()]));
}
/**
*
* @Description 连接字符串
* @param sign 连接符
* @param before 前置字符串
* @param after 后置字符串
* @param strs 要连接的字符串集合
* @return
* @author 曲欣亮
* @date 2016年4月24日
* @since 2016年4月24日
* @return String
* @throws
*/
public
static
String
join
(
String
sign
,
String
before
,
String
after
,
String
...
strs
)
{
return
StringUtil
.
join
(
sign
,
before
,
after
,
""
,
strs
);
}
public
static
String
join
(
String
sign
,
String
before
,
String
after
,
String
def
,
String
[]
strs
)
{
if
(
strs
==
null
||
strs
.
length
==
0
||
StringUtil
.
isEmptyAll
((
Object
[])
strs
))
{
return
StringUtil
.
isEmpty
(
def
)
?
""
:
def
;
}
else
{
StringBuffer
sb
=
new
StringBuffer
(
""
);
for
(
int
i
=
0
;
i
<
strs
.
length
;
i
++)
{
String
str
=
String
.
valueOf
(
strs
[
i
]);
sb
.
append
((
i
==
0
&&
before
!=
null
)
?
before
:
""
).
append
(
str
==
null
?
""
:
str
).
append
(
i
<
strs
.
length
-
1
?
(
sign
==
null
?
""
:
sign
)
:
""
).
append
((
i
==
strs
.
length
-
1
&&
after
!=
null
)
?
after
:
""
);
}
return
String
.
valueOf
(
sb
);
}
}
/**
*
* @Description 连接字符串
* @param sign 连接符
* @param before 前置字符串
* @param after 后置字符串
* @param strs 要连接的字符串的集合
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
join
(
String
sign
,
String
before
,
String
after
,
Collection
<
String
>
strs
)
{
return
StringUtil
.
join
(
sign
,
before
,
after
,
strs
.
toArray
(
new
String
[
strs
.
size
()]));
}
public
static
String
join
(
String
sign
,
String
before
,
String
after
,
String
def
,
Collection
<
String
>
strs
)
{
return
StringUtil
.
join
(
sign
,
before
,
after
,
def
,
strs
.
toArray
(
new
String
[
strs
.
size
()]));
}
/**
*
* @Description 连接字符串
* @param str 要链接的字符串
* @param sign 连接符
* @param count 链接的次数
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
join
(
String
str
,
String
sign
,
int
count
)
{
return
StringUtil
.
join
(
str
,
sign
,
count
,
""
,
""
);
}
/**
*
* @Description 连接字符串
* @param str 要链接的字符串
* @param sign 连接符
* @param count 链接次数
* @param before 前置字符串
* @param after 后置字符串
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
join
(
String
str
,
String
sign
,
int
count
,
String
before
,
String
after
)
{
if
(
str
==
null
||
count
==
0
)
{
return
""
;
}
else
{
StringBuffer
sb
=
new
StringBuffer
(
""
);
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
sb
.
append
(
i
==
0
&&
before
!=
null
?
before
:
""
).
append
(
str
).
append
(
i
<
count
-
1
?
(
sign
==
null
?
""
:
sign
)
:
""
).
append
(
i
==
count
-
1
&&
after
!=
null
?
after
:
""
);
}
return
String
.
valueOf
(
sb
);
}
}
/**
*
* @Description 判断字符串数组是否包含特定字符串
* @param arry 要判断的字符串数组
* @param arg 要找的目标字符串
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
contains
(
String
[]
arry
,
String
arg
)
{
for
(
String
str
:
arry
)
{
if
(
arg
!=
null
&&
arg
.
equals
(
str
))
{
return
true
;
}
else
if
(
arg
==
null
&&
str
==
null
)
{
return
true
;
}
}
return
false
;
}
/**
*
* @Description 判断字符串是否是整数
* @param val
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
isInt
(
String
val
)
{
String
regex
=
"^-?\\d+$"
;
return
matcher
(
val
,
regex
);
}
/**
*
* @Description 判断字符串是否是浮点数
* @param val
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
isFloat
(
String
val
)
{
String
regex
=
"^(-?\\d+)(\\.\\d+)?$"
;
return
matcher
(
val
,
regex
);
}
/**
*
* @Description 判断字符串是否是日期
* @param val
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
isDate
(
String
val
)
{
String
regex
=
"^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1][0-9])|([2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$"
;
return
matcher
(
val
,
regex
);
}
/**
*
* @Description 判断字符串是否是IP地址
* @param ip
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
isIp
(
String
ip
)
{
String
regex
=
"(2[5][0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})"
;
return
matcher
(
ip
,
regex
);
}
/**
*
* @Description 正则表达式验证字符串
* @param val 目标字符串
* @param regex 正则表达式
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
matcher
(
String
val
,
String
regex
)
{
Pattern
p
=
Pattern
.
compile
(
regex
);
Matcher
m
=
p
.
matcher
(
val
);
return
m
.
matches
();
}
/**
* 只要有一个不为空,就返回true
* @param objs
* @return
*/
public
static
boolean
isNotEmptyOne
(
Object
...
objs
)
{
for
(
Object
obj
:
objs
)
{
if
(
StringUtil
.
isNotEmpty
(
obj
))
{
return
true
;
}
}
return
false
;
}
public
static
boolean
isEmptyAll
(
Object
...
objs
)
{
for
(
Object
obj
:
objs
)
{
if
(
StringUtil
.
isNotEmpty
(
obj
))
{
return
false
;
}
}
return
true
;
}
/**
*
* @Description 判断字符串是否为空
* @param obj
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean obj==null或obj==""返回true否则返回false
* @throws
*/
public
static
boolean
isEmpty
(
Object
obj
)
{
if
(
obj
==
null
||
""
.
equals
(
String
.
valueOf
(
obj
)))
{
return
true
;
}
else
{
return
false
;
}
}
/**
*
* @Description 判断字符串是否是undefined或null
* @param objs
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean 全部对象都不是null和"undefined"和"null"返回true否则返回false
* @throws
*/
public
static
boolean
isNotUndefinedAndNull
(
Object
...
objs
)
{
if
(
objs
==
null
||
objs
.
length
==
0
)
{
return
false
;
}
else
{
for
(
Object
obj
:
objs
)
{
String
objStr
=
String
.
valueOf
(
obj
).
toLowerCase
();
if
(
obj
==
null
||
"undefined"
.
equals
(
objStr
)
||
"null"
.
equals
(
objStr
))
{
return
false
;
}
}
return
true
;
}
}
/**
*
* @Description 判断对象是否是undefined或null
* @param obj
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean obj==null,obj=="undefined",obj=="null" 返回true否则返回false
* @throws
*/
public
static
boolean
isUndefinedOrNull
(
Object
obj
)
{
String
objStr
=
String
.
valueOf
(
obj
).
toLowerCase
();
if
(
obj
==
null
||
"undefined"
.
equals
(
objStr
)
||
"null"
.
equals
(
objStr
))
{
return
true
;
}
else
{
return
false
;
}
}
/**
*
* @Description 判断一个或多个字符串是否非空
* @param objs
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean 全部字符串都不为null和空字符串返回true否则返回false
* @throws
*/
public
static
boolean
isNotEmpty
(
Object
...
objs
)
{
if
(
objs
==
null
||
objs
.
length
==
0
)
{
return
false
;
}
else
{
for
(
Object
obj
:
objs
)
{
if
(
obj
==
null
||
""
.
equals
(
String
.
valueOf
(
obj
)))
{
return
false
;
}
}
return
true
;
}
}
/**
*
* @Description 判断一个字符串是否是空白的(包括空格、换行、制表符)
* @param obj
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
isBlank
(
Object
obj
)
{
if
(
obj
==
null
||
String
.
valueOf
(
obj
).
trim
().
length
()
==
0
)
{
return
true
;
}
else
{
return
false
;
}
}
/**
*
* @Description 判断一个或多个字符串是否是空白的(包括空格、换行、制表符)
* @param objs
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean 全部不为空白时返回true 否则只要有一个是空白的就返回false
* @throws
*/
public
static
boolean
isNotBlank
(
Object
...
objs
)
{
if
(
objs
==
null
||
objs
.
length
==
0
)
{
return
false
;
}
else
{
for
(
Object
obj
:
objs
)
{
if
(
obj
==
null
||
String
.
valueOf
(
obj
).
trim
().
length
()
==
0
)
{
return
false
;
}
}
return
true
;
}
}
/**
*
* @Description 截取字符串
* @param string 被截取的字符串
* @param from 开始点子串
* @param to 结束点子串
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
substring
(
String
string
,
String
from
,
String
to
)
{
return
string
.
substring
(
string
.
indexOf
(
from
)
+
from
.
length
(),
string
.
lastIndexOf
(
to
));
}
/**
*
* @Description 获取字符串的字节长度
* @param string
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return int
* @throws
*/
public
static
int
bytesLength
(
String
string
)
{
int
length
=
0
;
for
(
int
i
=
0
;
i
<
string
.
length
();
i
++)
{
if
(
new
String
(
string
.
charAt
(
i
)
+
""
).
getBytes
().
length
>
1
)
{
length
+=
2
;
}
else
{
length
+=
1
;
}
}
return
length
/
2
;
}
/**
*
* @Description 获取字符的ASCII码
* @param c
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return int
* @throws
*/
public
static
int
toAscii
(
char
c
)
{
try
{
byte
[]
bytes
=
String
.
valueOf
(
c
).
getBytes
(
"gb2312"
);
if
(
bytes
.
length
==
1
)
{
return
bytes
[
0
];
}
else
if
(
bytes
.
length
==
2
)
{
int
hightByte
=
256
+
bytes
[
0
];
int
lowByte
=
256
+
bytes
[
1
];
return
(
256
*
hightByte
+
lowByte
)
-
256
*
256
;
}
else
{
return
0
;
}
}
catch
(
Exception
e
)
{
throw
new
ReflectException
(
e
);
}
}
/**
*
* @Description 获取汉字词组拼音简写
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String 返回小写拼音
* @throws
*/
public
static
String
simplePinyin
(
String
str
)
{
if
(
StringUtil
.
isNotEmpty
(
str
))
{
StringBuffer
sbuffer
=
new
StringBuffer
();
for
(
char
c
:
str
.
toCharArray
())
{
sbuffer
.
append
(
StringUtil
.
firstPinyin
(
String
.
valueOf
(
c
)));
}
return
String
.
valueOf
(
sbuffer
);
}
else
{
return
""
;
}
}
/**
*
* @Description 获取汉字词组拼音简写
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String 返回大写拼音
* @throws
*/
public
static
String
SimplePinyin
(
String
str
)
{
return
simplePinyin
(
str
).
toUpperCase
();
}
public
static
String
[]
PinyinKAnalyzer
(
String
str
,
Integer
minLength
,
Integer
maxLength
)
{
List
<
String
>
list
=
new
ArrayList
<
String
>();
for
(
int
i
=
0
;
i
<
str
.
length
();
i
++)
{
for
(
int
n
=
i
;
n
<
str
.
length
();
n
++)
{
Integer
length
=
n
+
1
-
i
;
if
(
length
>=
minLength
&&
maxLength
>=
length
)
{
list
.
add
(
str
.
substring
(
i
,
n
+
1
));
}
}
}
return
list
.
toArray
(
new
String
[
list
.
size
()]);
}
/**
*
* @Description 获取中文字符串的全拼
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String 返回小写拼音
* @throws
*/
public
static
String
fullPinyin
(
String
src
)
{
char
[]
t1
=
null
;
t1
=
src
.
toCharArray
();
String
[]
t2
=
new
String
[
t1
.
length
];
HanyuPinyinOutputFormat
t3
=
new
HanyuPinyinOutputFormat
();
t3
.
setCaseType
(
HanyuPinyinCaseType
.
LOWERCASE
);
t3
.
setToneType
(
HanyuPinyinToneType
.
WITHOUT_TONE
);
t3
.
setVCharType
(
HanyuPinyinVCharType
.
WITH_V
);
String
t4
=
""
;
int
t0
=
t1
.
length
;
try
{
for
(
int
i
=
0
;
i
<
t0
;
i
++)
{
if
(
java
.
lang
.
Character
.
toString
(
t1
[
i
]).
matches
(
"[\\u4E00-\\u9FA5]+"
))
{
t2
=
PinyinHelper
.
toHanyuPinyinStringArray
(
t1
[
i
],
t3
);
t4
+=
t2
[
0
];
}
else
{
t4
+=
java
.
lang
.
Character
.
toString
(
t1
[
i
]);
}
}
return
t4
;
}
catch
(
BadHanyuPinyinOutputFormatCombination
e1
)
{
e1
.
printStackTrace
();
}
return
t4
;
}
/**
*
* @Description 获取中文字符串的全拼
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String 返回大写拼音
* @throws
*/
public
static
String
FullPinyin
(
String
str
)
{
return
fullPinyin
(
str
).
toUpperCase
();
}
/**
*
* @Description 获取汉子拼音首字母
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String 返回小写首拼音字母
* @throws
*/
public
static
String
firstPinyin
(
String
str
)
{
try
{
return
String
.
valueOf
(
fullPinyin
(
str
).
charAt
(
0
));
}
catch
(
Exception
e
)
{
return
""
;
}
}
/**
*
* @Description 获取汉子拼音首字母
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String 返回大写首拼音字母
* @throws
*/
public
static
String
FirstPinyin
(
String
str
)
{
return
firstPinyin
(
str
).
toUpperCase
();
}
/**
* @throws IOException
*
* @Description 从BufferedReader对象中读取字符串或文本
* @param reader
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
read
(
Reader
reader
)
throws
IOException
{
BufferedReader
br
=
null
;
br
=
new
BufferedReader
(
reader
);
StringBuffer
sb
=
new
StringBuffer
();
String
line
=
null
;
while
((
line
=
br
.
readLine
())
!=
null
)
{
sb
.
append
(
line
+
System
.
getProperty
(
"line.separator"
));
}
return
sb
.
toString
();
}
/**
* 从输入流总读取字符串
* @param is
* @return
* @throws IOException
*/
public
static
String
read
(
InputStream
is
)
throws
IOException
{
BufferedReader
br
=
new
BufferedReader
(
new
InputStreamReader
(
is
,
"UTF-8"
));
String
str
=
read
(
br
);
return
str
;
}
/**
* 将文本写入的输出流
* @param writer
* @param text
*/
public
static
void
write
(
Writer
writer
,
String
text
)
{
PrintWriter
printWriter
=
new
PrintWriter
(
writer
);
printWriter
.
append
(
text
);
printWriter
.
flush
();
}
/**
*
* @Description 首字母大写
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
upperFirst
(
String
str
)
{
char
[]
ch
=
str
.
toCharArray
();
if
(
ch
[
0
]
>=
'a'
&&
ch
[
0
]
<=
'z'
)
{
ch
[
0
]
=
(
char
)
(
ch
[
0
]
-
32
);
}
return
new
String
(
ch
);
}
/**
*
* @Description 首字母小写
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
lowerFirst
(
String
str
)
{
char
[]
chars
=
new
char
[
1
];
chars
[
0
]
=
str
.
charAt
(
0
);
String
temp
=
new
String
(
chars
);
if
(
chars
[
0
]
>=
'A'
&&
chars
[
0
]
<=
'Z'
)
{
return
str
.
replaceFirst
(
temp
,
temp
.
toLowerCase
());
}
return
str
;
}
/**
*
* @Description 返回一个非空的字符串
* @param strings
* @return
* @author 曲欣亮
* @date 2016年4月26日
* @since 2016年4月26日
* @return String
* @throws
*/
public
static
String
getNotNull
(
String
...
strings
)
{
for
(
String
string
:
strings
)
{
if
(
string
!=
null
)
{
return
string
;
}
}
throw
new
PluginException
(
"NotNull Data is null"
);
}
/**
*
* @Description 返回一个非空的字符串
* @param strings
* @return
* @author 曲欣亮
* @date 2016年4月26日
* @since 2016年4月26日
* @return String
* @throws
*/
public
static
String
getNotEmpty
(
String
...
strings
)
{
for
(
String
string
:
strings
)
{
if
(
StringUtil
.
isNotEmpty
(
string
))
{
return
string
;
}
}
throw
new
PluginException
(
"NotEmpty Data is null"
);
}
/**
*
* @Description 返回一个非空的字符串
* @param strings
* @return
* @author 曲欣亮
* @date 2016年4月26日
* @since 2016年4月26日
* @return String
* @throws
*/
public
static
String
getNotBlank
(
String
...
strings
)
{
for
(
String
string
:
strings
)
{
if
(
StringUtil
.
isNotBlank
(
string
))
{
return
string
;
}
}
throw
new
PluginException
(
"NotBlank Data is null"
);
}
/**
*
* @Description 返回一个非空的字符串
* @param strings
* @return
* @author 曲欣亮
* @date 2016年4月26日
* @since 2016年4月26日
* @return String
* @throws
*/
public
static
String
getNotUndefinedAndNull
(
String
...
strings
)
{
for
(
String
string
:
strings
)
{
if
(
StringUtil
.
isNotUndefinedAndNull
(
string
))
{
return
string
;
}
}
throw
new
PluginException
(
"UndefinedAndNull Data is null"
);
}
public
static
String
format
(
Object
obj
)
{
if
(
obj
==
null
)
{
return
null
;
}
if
(
obj
instanceof
Date
)
{
return
DateUtil
.
format
((
Date
)
obj
);
}
else
{
return
String
.
valueOf
(
obj
);
}
}
public
static
String
formatLength
(
Integer
nNo
,
String
format
)
{
return
formatLength
(
String
.
valueOf
(
nNo
),
format
);
}
public
static
String
formatLength
(
Long
nNo
,
String
format
)
{
return
formatLength
(
String
.
valueOf
(
nNo
),
format
);
}
public
static
String
formatLength
(
String
sNo
,
String
format
)
{
Integer
end
=
(
format
.
length
()
>
sNo
.
length
()
?
(
format
.
length
()
-
sNo
.
length
())
:
0
);
return
format
.
substring
(
0
,
end
)
+
sNo
;
}
public
static
String
toJson
(
Object
object
)
{
return
GsonUtil
.
toJson
(
object
);
}
public
static
String
trim
(
String
string
,
String
...
strs
)
{
String
tmp
=
string
;
for
(
String
str
:
strs
)
{
while
(
tmp
.
startsWith
(
str
))
{
tmp
=
tmp
.
substring
(
1
);
}
while
(
tmp
.
endsWith
(
str
))
{
tmp
=
tmp
.
substring
(
0
,
tmp
.
length
()
-
1
);
}
}
return
tmp
;
}
public
static
String
decodeBase64AsString
(
String
base64String
)
{
return
new
String
(
decodeBase64String
(
base64String
));
}
public
static
String
encodeBase64String
(
String
string
)
{
return
encodeBase64String
(
string
.
getBytes
());
}
public
static
String
encodeBase64String
(
byte
[]
bytes
)
{
return
new
String
(
Base64
.
encodeBase64
(
bytes
));
}
public
static
String
decodeHexAsString
(
String
hexString
)
{
return
new
String
(
decodeHexString
(
hexString
));
}
public
static
String
encodeHexString
(
String
string
)
{
return
encodeHexString
(
string
.
getBytes
());
}
public
static
String
encodeHexString
(
byte
[]
bytes
)
{
return
Hex
.
encodeHexString
(
bytes
);
}
public
static
byte
[]
decodeBase64String
(
String
base64String
)
{
return
Base64
.
decodeBase64
(
base64String
);
}
public
static
byte
[]
decodeHexString
(
String
hexString
)
{
try
{
return
Hex
.
decodeHex
(
hexString
.
toCharArray
());
}
catch
(
DecoderException
e
)
{
throw
new
CharsetException
(
e
);
}
}
public
static
String
toSHA1String
(
String
text
)
{
try
{
MessageDigest
messageDigest
=
MessageDigest
.
getInstance
(
"SHA1"
);
messageDigest
.
update
(
text
.
getBytes
());
byte
[]
bytes
=
messageDigest
.
digest
();
StringBuffer
hexString
=
new
StringBuffer
();
for
(
int
i
=
0
;
i
<
bytes
.
length
;
i
++)
{
String
shaHex
=
Integer
.
toHexString
(
bytes
[
i
]
&
0xFF
);
if
(
shaHex
.
length
()
<
2
)
{
hexString
.
append
(
0
);
}
hexString
.
append
(
shaHex
);
}
return
hexString
.
toString
().
toUpperCase
();
}
catch
(
Exception
e
)
{
throw
new
SHA1Exception
(
e
);
}
}
public
static
String
toHMACSHA1String
(
String
encryptText
,
String
encryptKey
)
{
try
{
SecretKey
secretKey
=
new
SecretKeySpec
(
encryptKey
.
getBytes
(),
"HmacSHA1"
);
Mac
mac
=
Mac
.
getInstance
(
secretKey
.
getAlgorithm
());
mac
.
init
(
secretKey
);
byte
[]
bs
=
mac
.
doFinal
(
encryptText
.
getBytes
());
return
Base64
.
encodeBase64String
(
bs
);
}
catch
(
Exception
e
)
{
throw
new
SHA1Exception
(
e
);
}
}
public
static
String
toMD5HexString
(
String
text
)
{
try
{
return
StringUtil
.
encodeHexString
(
MessageDigest
.
getInstance
(
"MD5"
).
digest
(
text
.
getBytes
())).
toUpperCase
();
}
catch
(
Exception
e
)
{
throw
new
MD5Exception
(
e
);
}
}
public
static
String
toMD5Base64String
(
String
text
)
{
try
{
return
StringUtil
.
encodeBase64String
(
MessageDigest
.
getInstance
(
"MD5"
).
digest
(
text
.
getBytes
()));
}
catch
(
Exception
e
)
{
throw
new
MD5Exception
(
e
);
}
}
public
static
String
getUid
()
{
return
UUID
.
randomUUID
().
toString
().
replaceAll
(
"-"
,
""
).
toUpperCase
();
}
public
static
String
getId
(
Integer
length
,
String
prefix
)
{
if
(
prefix
==
null
)
{
prefix
=
""
;
}
if
(
length
==
null
)
{
length
=
32
;
}
Integer
i
=
length
-
prefix
.
length
()
-
17
;
return
prefix
+
DateUtil
.
format
(
new
Date
(),
"yyyyMMddHHmmssSSS"
)
+
(
i
<=
0
?
""
:
MathUtil
.
random
(
i
));
}
public
static
String
getId
(
String
prefix
)
{
return
getId
(
32
,
prefix
);
}
public
static
String
getId
(
Integer
length
)
{
return
getId
(
length
,
""
);
}
public
static
String
getId
()
{
return
getId
(
32
,
""
);
}
public
static
String
[]
search
(
String
string
,
String
regex
)
{
return
StringUtil
.
search
(
string
,
regex
,
null
);
}
public
static
String
[]
search
(
String
string
,
String
regex
,
Integer
groupNo
)
{
Pattern
pattern
=
Pattern
.
compile
(
regex
);
Matcher
matcher
=
pattern
.
matcher
(
string
);
List
<
String
>
list
=
new
ArrayList
<
String
>();
while
(
matcher
.
find
())
{
if
(
groupNo
!=
null
)
{
list
.
add
(
matcher
.
group
(
groupNo
));
}
else
{
list
.
add
(
matcher
.
group
(
0
));
}
}
return
list
.
toArray
(
new
String
[
list
.
size
()]);
}
public
static
String
[]
searchNumber
(
String
string
)
{
List
<
String
>
numbers
=
new
ArrayList
<
String
>();
Pattern
pattern
=
Pattern
.
compile
(
"[\\d]+(\\.?[\\d]+)?"
);
Matcher
matcher
=
pattern
.
matcher
(
string
);
while
(
matcher
.
find
())
{
numbers
.
add
(
matcher
.
group
(
0
));
}
return
numbers
.
toArray
(
new
String
[
numbers
.
size
()]);
}
/**
*
* @Description 从BufferedReader对象中读取字符串或文本
* @param reader
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
read
(
BufferedReader
reader
)
{
try
{
StringBuffer
sb
=
new
StringBuffer
();
String
line
=
null
;
while
((
line
=
reader
.
readLine
())
!=
null
)
{
sb
.
append
(
line
+
System
.
getProperty
(
"line.separator"
));
}
return
sb
.
toString
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
""
;
}
/**
*
* @Title: doMD5Sign
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @param map
* @param: @return
* @return: String
* @throws
*/
public
static
String
doMD5Sign
(
Map
<
String
,
String
>
map
){
Map
<
String
,
String
>
compMap
=
new
TreeMap
<
String
,
String
>(
new
Comparator
<
String
>()
{
public
int
compare
(
String
obj1
,
String
obj2
)
{
return
obj1
.
compareTo
(
obj2
);
}
});
for
(
Entry
<
String
,
String
>
entry
:
map
.
entrySet
()){
compMap
.
put
(
entry
.
getKey
(),
entry
.
getValue
());
}
StringBuffer
sb
=
new
StringBuffer
();
for
(
Entry
<
String
,
String
>
entry
:
compMap
.
entrySet
()){
sb
.
append
(
"&"
);
sb
.
append
(
entry
.
getKey
());
sb
.
append
(
"="
);
sb
.
append
(
entry
.
getValue
());
}
String
s
=
sb
.
toString
().
substring
(
1
);
byte
[]
secretBytes
=
null
;
try
{
secretBytes
=
MessageDigest
.
getInstance
(
"MD5"
).
digest
(
s
.
getBytes
());
}
catch
(
NoSuchAlgorithmException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
String
sign
=
Hex
.
encodeHexString
(
secretBytes
).
toUpperCase
();
return
sign
;
}
public
static
String
getRandom
(
int
num
){
return
String
.
valueOf
(
Math
.
random
()).
substring
(
2
,
2
+
num
);
}
/**
* 获取随机字符串
* @return
*/
public
static
String
getNonceStr
()
{
// 随机数
String
currTime
=
DateUtil
.
format
(
new
Date
(),
DateUtil
.
FMT_YYYYMMddHHMMSS
);
// 8位日期
String
strTime
=
currTime
.
substring
(
8
,
currTime
.
length
());
// 四位随机数
String
strRandom
=
getRandom
(
4
)
+
""
;
// 10位序列号,可以自行调整。
return
strTime
+
strRandom
;
}
public
static
final
String
inputStream2String
(
InputStream
in
)
throws
UnsupportedEncodingException
,
IOException
{
if
(
in
==
null
)
return
""
;
StringBuffer
out
=
new
StringBuffer
();
byte
[]
b
=
new
byte
[
4096
];
for
(
int
n
;
(
n
=
in
.
read
(
b
))
!=
-
1
;)
{
out
.
append
(
new
String
(
b
,
0
,
n
,
"UTF-8"
));
}
return
out
.
toString
();
}
}
package
com
.
egolm
.
common
;
import
java.io.BufferedReader
;
import
java.io.IOException
;
import
java.io.InputStream
;
import
java.io.InputStreamReader
;
import
java.io.PrintWriter
;
import
java.io.Reader
;
import
java.io.UnsupportedEncodingException
;
import
java.io.Writer
;
import
java.security.MessageDigest
;
import
java.security.NoSuchAlgorithmException
;
import
java.util.ArrayList
;
import
java.util.Collection
;
import
java.util.Comparator
;
import
java.util.Date
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Map.Entry
;
import
java.util.TreeMap
;
import
java.util.UUID
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
javax.crypto.Mac
;
import
javax.crypto.SecretKey
;
import
javax.crypto.spec.SecretKeySpec
;
import
org.apache.commons.codec.DecoderException
;
import
org.apache.commons.codec.binary.Base64
;
import
org.apache.commons.codec.binary.Hex
;
import
com.egolm.common.exception.CharsetException
;
import
com.egolm.common.exception.MD5Exception
;
import
com.egolm.common.exception.PluginException
;
import
com.egolm.common.exception.ReflectException
;
import
com.egolm.common.exception.SHA1Exception
;
import
net.sourceforge.pinyin4j.PinyinHelper
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinCaseType
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinToneType
;
import
net.sourceforge.pinyin4j.format.HanyuPinyinVCharType
;
import
net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination
;
/**
*
* @Description 字符串工具类
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
*/
public
class
StringUtil
{
public
static
String
join
(
Map
<
String
,
Object
>
map
,
String
sign
,
String
before
,
String
after
,
String
joinKey
)
{
sign
=
sign
==
null
?
""
:
sign
;
before
=
before
==
null
?
""
:
before
;
after
=
after
==
null
?
""
:
after
;
List
<
String
>
strs
=
new
ArrayList
<
String
>();
for
(
String
key
:
map
.
keySet
())
{
StringBuffer
sbuffer
=
new
StringBuffer
();
sbuffer
.
append
(
key
).
append
(
joinKey
);
sbuffer
.
append
(
StringUtil
.
format
(
map
.
get
(
key
)));
strs
.
add
(
sbuffer
.
toString
());
}
return
StringUtil
.
join
(
sign
,
before
,
after
,
strs
);
}
public
static
String
join
(
String
sign
,
Collection
<
String
>
strs
)
{
return
join
(
sign
,
""
,
""
,
strs
.
toArray
(
new
String
[
strs
.
size
()]));
}
/**
*
* @Description 连接字符串
* @param sign 连接符
* @param before 前置字符串
* @param strs 要连接的字符串集合
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
join
(
String
sign
,
String
before
,
Collection
<
String
>
strs
)
{
return
join
(
sign
,
before
,
""
,
strs
.
toArray
(
new
String
[
strs
.
size
()]));
}
/**
*
* @Description 连接字符串
* @param sign 连接符
* @param before 前置字符串
* @param after 后置字符串
* @param strs 要连接的字符串集合
* @return
* @author 曲欣亮
* @date 2016年4月24日
* @since 2016年4月24日
* @return String
* @throws
*/
public
static
String
join
(
String
sign
,
String
before
,
String
after
,
String
...
strs
)
{
return
StringUtil
.
join
(
sign
,
before
,
after
,
""
,
strs
);
}
public
static
String
join
(
String
sign
,
String
before
,
String
after
,
String
def
,
String
[]
strs
)
{
if
(
strs
==
null
||
strs
.
length
==
0
||
StringUtil
.
isEmptyAll
((
Object
[])
strs
))
{
return
StringUtil
.
isEmpty
(
def
)
?
""
:
def
;
}
else
{
StringBuffer
sb
=
new
StringBuffer
(
""
);
for
(
int
i
=
0
;
i
<
strs
.
length
;
i
++)
{
String
str
=
String
.
valueOf
(
strs
[
i
]);
sb
.
append
((
i
==
0
&&
before
!=
null
)
?
before
:
""
).
append
(
str
==
null
?
""
:
str
).
append
(
i
<
strs
.
length
-
1
?
(
sign
==
null
?
""
:
sign
)
:
""
).
append
((
i
==
strs
.
length
-
1
&&
after
!=
null
)
?
after
:
""
);
}
return
String
.
valueOf
(
sb
);
}
}
/**
*
* @Description 连接字符串
* @param sign 连接符
* @param before 前置字符串
* @param after 后置字符串
* @param strs 要连接的字符串的集合
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
join
(
String
sign
,
String
before
,
String
after
,
Collection
<
String
>
strs
)
{
return
StringUtil
.
join
(
sign
,
before
,
after
,
strs
.
toArray
(
new
String
[
strs
.
size
()]));
}
public
static
String
join
(
String
sign
,
String
before
,
String
after
,
String
def
,
Collection
<
String
>
strs
)
{
return
StringUtil
.
join
(
sign
,
before
,
after
,
def
,
strs
.
toArray
(
new
String
[
strs
.
size
()]));
}
/**
*
* @Description 连接字符串
* @param str 要链接的字符串
* @param sign 连接符
* @param count 链接的次数
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
join
(
String
str
,
String
sign
,
int
count
)
{
return
StringUtil
.
join
(
str
,
sign
,
count
,
""
,
""
);
}
/**
*
* @Description 连接字符串
* @param str 要链接的字符串
* @param sign 连接符
* @param count 链接次数
* @param before 前置字符串
* @param after 后置字符串
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
join
(
String
str
,
String
sign
,
int
count
,
String
before
,
String
after
)
{
if
(
str
==
null
||
count
==
0
)
{
return
""
;
}
else
{
StringBuffer
sb
=
new
StringBuffer
(
""
);
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
sb
.
append
(
i
==
0
&&
before
!=
null
?
before
:
""
).
append
(
str
).
append
(
i
<
count
-
1
?
(
sign
==
null
?
""
:
sign
)
:
""
).
append
(
i
==
count
-
1
&&
after
!=
null
?
after
:
""
);
}
return
String
.
valueOf
(
sb
);
}
}
/**
*
* @Description 判断字符串数组是否包含特定字符串
* @param arry 要判断的字符串数组
* @param arg 要找的目标字符串
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
contains
(
String
[]
arry
,
String
arg
)
{
for
(
String
str
:
arry
)
{
if
(
arg
!=
null
&&
arg
.
equals
(
str
))
{
return
true
;
}
else
if
(
arg
==
null
&&
str
==
null
)
{
return
true
;
}
}
return
false
;
}
/**
*
* @Description 判断字符串是否是整数
* @param val
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
isInt
(
String
val
)
{
String
regex
=
"^-?\\d+$"
;
return
matcher
(
val
,
regex
);
}
/**
*
* @Description 判断字符串是否是浮点数
* @param val
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
isFloat
(
String
val
)
{
String
regex
=
"^(-?\\d+)(\\.\\d+)?$"
;
return
matcher
(
val
,
regex
);
}
/**
*
* @Description 判断字符串是否是日期
* @param val
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
isDate
(
String
val
)
{
String
regex
=
"^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1][0-9])|([2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$"
;
return
matcher
(
val
,
regex
);
}
/**
*
* @Description 判断字符串是否是IP地址
* @param ip
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
isIp
(
String
ip
)
{
String
regex
=
"(2[5][0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})"
;
return
matcher
(
ip
,
regex
);
}
/**
*
* @Description 正则表达式验证字符串
* @param val 目标字符串
* @param regex 正则表达式
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
matcher
(
String
val
,
String
regex
)
{
Pattern
p
=
Pattern
.
compile
(
regex
);
Matcher
m
=
p
.
matcher
(
val
);
return
m
.
matches
();
}
/**
* 只要有一个不为空,就返回true
* @param objs
* @return
*/
public
static
boolean
isNotEmptyOne
(
Object
...
objs
)
{
for
(
Object
obj
:
objs
)
{
if
(
StringUtil
.
isNotEmpty
(
obj
))
{
return
true
;
}
}
return
false
;
}
public
static
boolean
isEmptyAll
(
Object
...
objs
)
{
for
(
Object
obj
:
objs
)
{
if
(
StringUtil
.
isNotEmpty
(
obj
))
{
return
false
;
}
}
return
true
;
}
/**
*
* @Description 判断字符串是否为空
* @param obj
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean obj==null或obj==""返回true否则返回false
* @throws
*/
public
static
boolean
isEmpty
(
Object
obj
)
{
if
(
obj
==
null
||
""
.
equals
(
String
.
valueOf
(
obj
)))
{
return
true
;
}
else
{
return
false
;
}
}
/**
*
* @Description 判断字符串是否是undefined或null
* @param objs
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean 全部对象都不是null和"undefined"和"null"返回true否则返回false
* @throws
*/
public
static
boolean
isNotUndefinedAndNull
(
Object
...
objs
)
{
if
(
objs
==
null
||
objs
.
length
==
0
)
{
return
false
;
}
else
{
for
(
Object
obj
:
objs
)
{
String
objStr
=
String
.
valueOf
(
obj
).
toLowerCase
();
if
(
obj
==
null
||
"undefined"
.
equals
(
objStr
)
||
"null"
.
equals
(
objStr
))
{
return
false
;
}
}
return
true
;
}
}
/**
*
* @Description 判断对象是否是undefined或null
* @param obj
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean obj==null,obj=="undefined",obj=="null" 返回true否则返回false
* @throws
*/
public
static
boolean
isUndefinedOrNull
(
Object
obj
)
{
String
objStr
=
String
.
valueOf
(
obj
).
toLowerCase
();
if
(
obj
==
null
||
"undefined"
.
equals
(
objStr
)
||
"null"
.
equals
(
objStr
))
{
return
true
;
}
else
{
return
false
;
}
}
/**
*
* @Description 判断一个或多个字符串是否非空
* @param objs
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean 全部字符串都不为null和空字符串返回true否则返回false
* @throws
*/
public
static
boolean
isNotEmpty
(
Object
...
objs
)
{
if
(
objs
==
null
||
objs
.
length
==
0
)
{
return
false
;
}
else
{
for
(
Object
obj
:
objs
)
{
if
(
obj
==
null
||
""
.
equals
(
String
.
valueOf
(
obj
)))
{
return
false
;
}
}
return
true
;
}
}
/**
*
* @Description 判断一个字符串是否是空白的(包括空格、换行、制表符)
* @param obj
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean
* @throws
*/
public
static
boolean
isBlank
(
Object
obj
)
{
if
(
obj
==
null
||
String
.
valueOf
(
obj
).
trim
().
length
()
==
0
)
{
return
true
;
}
else
{
return
false
;
}
}
/**
*
* @Description 判断一个或多个字符串是否是空白的(包括空格、换行、制表符)
* @param objs
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return boolean 全部不为空白时返回true 否则只要有一个是空白的就返回false
* @throws
*/
public
static
boolean
isNotBlank
(
Object
...
objs
)
{
if
(
objs
==
null
||
objs
.
length
==
0
)
{
return
false
;
}
else
{
for
(
Object
obj
:
objs
)
{
if
(
obj
==
null
||
String
.
valueOf
(
obj
).
trim
().
length
()
==
0
)
{
return
false
;
}
}
return
true
;
}
}
/**
*
* @Description 截取字符串
* @param string 被截取的字符串
* @param from 开始点子串
* @param to 结束点子串
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
substring
(
String
string
,
String
from
,
String
to
)
{
return
string
.
substring
(
string
.
indexOf
(
from
)
+
from
.
length
(),
string
.
lastIndexOf
(
to
));
}
/**
*
* @Description 获取字符串的字节长度
* @param string
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return int
* @throws
*/
public
static
int
bytesLength
(
String
string
)
{
int
length
=
0
;
for
(
int
i
=
0
;
i
<
string
.
length
();
i
++)
{
if
(
new
String
(
string
.
charAt
(
i
)
+
""
).
getBytes
().
length
>
1
)
{
length
+=
2
;
}
else
{
length
+=
1
;
}
}
return
length
/
2
;
}
/**
*
* @Description 获取字符的ASCII码
* @param c
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return int
* @throws
*/
public
static
int
toAscii
(
char
c
)
{
try
{
byte
[]
bytes
=
String
.
valueOf
(
c
).
getBytes
(
"gb2312"
);
if
(
bytes
.
length
==
1
)
{
return
bytes
[
0
];
}
else
if
(
bytes
.
length
==
2
)
{
int
hightByte
=
256
+
bytes
[
0
];
int
lowByte
=
256
+
bytes
[
1
];
return
(
256
*
hightByte
+
lowByte
)
-
256
*
256
;
}
else
{
return
0
;
}
}
catch
(
Exception
e
)
{
throw
new
ReflectException
(
e
);
}
}
/**
*
* @Description 获取汉字词组拼音简写
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String 返回小写拼音
* @throws
*/
public
static
String
simplePinyin
(
String
str
)
{
if
(
StringUtil
.
isNotEmpty
(
str
))
{
StringBuffer
sbuffer
=
new
StringBuffer
();
for
(
char
c
:
str
.
toCharArray
())
{
sbuffer
.
append
(
StringUtil
.
firstPinyin
(
String
.
valueOf
(
c
)));
}
return
String
.
valueOf
(
sbuffer
);
}
else
{
return
""
;
}
}
/**
*
* @Description 获取汉字词组拼音简写
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String 返回大写拼音
* @throws
*/
public
static
String
SimplePinyin
(
String
str
)
{
return
simplePinyin
(
str
).
toUpperCase
();
}
public
static
String
[]
PinyinKAnalyzer
(
String
str
,
Integer
minLength
,
Integer
maxLength
)
{
List
<
String
>
list
=
new
ArrayList
<
String
>();
for
(
int
i
=
0
;
i
<
str
.
length
();
i
++)
{
for
(
int
n
=
i
;
n
<
str
.
length
();
n
++)
{
Integer
length
=
n
+
1
-
i
;
if
(
length
>=
minLength
&&
maxLength
>=
length
)
{
list
.
add
(
str
.
substring
(
i
,
n
+
1
));
}
}
}
return
list
.
toArray
(
new
String
[
list
.
size
()]);
}
/**
*
* @Description 获取中文字符串的全拼
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String 返回小写拼音
* @throws
*/
public
static
String
fullPinyin
(
String
src
)
{
char
[]
t1
=
null
;
t1
=
src
.
toCharArray
();
String
[]
t2
=
new
String
[
t1
.
length
];
HanyuPinyinOutputFormat
t3
=
new
HanyuPinyinOutputFormat
();
t3
.
setCaseType
(
HanyuPinyinCaseType
.
LOWERCASE
);
t3
.
setToneType
(
HanyuPinyinToneType
.
WITHOUT_TONE
);
t3
.
setVCharType
(
HanyuPinyinVCharType
.
WITH_V
);
String
t4
=
""
;
int
t0
=
t1
.
length
;
try
{
for
(
int
i
=
0
;
i
<
t0
;
i
++)
{
if
(
java
.
lang
.
Character
.
toString
(
t1
[
i
]).
matches
(
"[\\u4E00-\\u9FA5]+"
))
{
t2
=
PinyinHelper
.
toHanyuPinyinStringArray
(
t1
[
i
],
t3
);
t4
+=
t2
[
0
];
}
else
{
t4
+=
java
.
lang
.
Character
.
toString
(
t1
[
i
]);
}
}
return
t4
;
}
catch
(
BadHanyuPinyinOutputFormatCombination
e1
)
{
e1
.
printStackTrace
();
}
return
t4
;
}
/**
*
* @Description 获取中文字符串的全拼
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String 返回大写拼音
* @throws
*/
public
static
String
FullPinyin
(
String
str
)
{
return
fullPinyin
(
str
).
toUpperCase
();
}
/**
*
* @Description 获取汉子拼音首字母
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String 返回小写首拼音字母
* @throws
*/
public
static
String
firstPinyin
(
String
str
)
{
try
{
return
String
.
valueOf
(
fullPinyin
(
str
).
charAt
(
0
));
}
catch
(
Exception
e
)
{
return
""
;
}
}
/**
*
* @Description 获取汉子拼音首字母
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String 返回大写首拼音字母
* @throws
*/
public
static
String
FirstPinyin
(
String
str
)
{
return
firstPinyin
(
str
).
toUpperCase
();
}
/**
* @throws IOException
*
* @Description 从BufferedReader对象中读取字符串或文本
* @param reader
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
read
(
Reader
reader
)
throws
IOException
{
BufferedReader
br
=
null
;
br
=
new
BufferedReader
(
reader
);
StringBuffer
sb
=
new
StringBuffer
();
String
line
=
null
;
while
((
line
=
br
.
readLine
())
!=
null
)
{
sb
.
append
(
line
+
System
.
getProperty
(
"line.separator"
));
}
return
sb
.
toString
();
}
/**
* 从输入流总读取字符串
* @param is
* @return
* @throws IOException
*/
public
static
String
read
(
InputStream
is
)
throws
IOException
{
BufferedReader
br
=
new
BufferedReader
(
new
InputStreamReader
(
is
,
"UTF-8"
));
String
str
=
read
(
br
);
return
str
;
}
/**
* 将文本写入的输出流
* @param writer
* @param text
*/
public
static
void
write
(
Writer
writer
,
String
text
)
{
PrintWriter
printWriter
=
new
PrintWriter
(
writer
);
printWriter
.
append
(
text
);
printWriter
.
flush
();
}
/**
*
* @Description 首字母大写
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
upperFirst
(
String
str
)
{
char
[]
ch
=
str
.
toCharArray
();
if
(
ch
[
0
]
>=
'a'
&&
ch
[
0
]
<=
'z'
)
{
ch
[
0
]
=
(
char
)
(
ch
[
0
]
-
32
);
}
return
new
String
(
ch
);
}
/**
*
* @Description 首字母小写
* @param str
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
lowerFirst
(
String
str
)
{
char
[]
chars
=
new
char
[
1
];
chars
[
0
]
=
str
.
charAt
(
0
);
String
temp
=
new
String
(
chars
);
if
(
chars
[
0
]
>=
'A'
&&
chars
[
0
]
<=
'Z'
)
{
return
str
.
replaceFirst
(
temp
,
temp
.
toLowerCase
());
}
return
str
;
}
/**
*
* @Description 返回一个非空的字符串
* @param strings
* @return
* @author 曲欣亮
* @date 2016年4月26日
* @since 2016年4月26日
* @return String
* @throws
*/
public
static
String
getNotNull
(
String
...
strings
)
{
for
(
String
string
:
strings
)
{
if
(
string
!=
null
)
{
return
string
;
}
}
throw
new
PluginException
(
"NotNull Data is null"
);
}
/**
*
* @Description 返回一个非空的字符串
* @param strings
* @return
* @author 曲欣亮
* @date 2016年4月26日
* @since 2016年4月26日
* @return String
* @throws
*/
public
static
String
getNotEmpty
(
String
...
strings
)
{
for
(
String
string
:
strings
)
{
if
(
StringUtil
.
isNotEmpty
(
string
))
{
return
string
;
}
}
throw
new
PluginException
(
"NotEmpty Data is null"
);
}
/**
*
* @Description 返回一个非空的字符串
* @param strings
* @return
* @author 曲欣亮
* @date 2016年4月26日
* @since 2016年4月26日
* @return String
* @throws
*/
public
static
String
getNotBlank
(
String
...
strings
)
{
for
(
String
string
:
strings
)
{
if
(
StringUtil
.
isNotBlank
(
string
))
{
return
string
;
}
}
throw
new
PluginException
(
"NotBlank Data is null"
);
}
/**
*
* @Description 返回一个非空的字符串
* @param strings
* @return
* @author 曲欣亮
* @date 2016年4月26日
* @since 2016年4月26日
* @return String
* @throws
*/
public
static
String
getNotUndefinedAndNull
(
String
...
strings
)
{
for
(
String
string
:
strings
)
{
if
(
StringUtil
.
isNotUndefinedAndNull
(
string
))
{
return
string
;
}
}
throw
new
PluginException
(
"UndefinedAndNull Data is null"
);
}
public
static
String
format
(
Object
obj
)
{
if
(
obj
==
null
)
{
return
null
;
}
if
(
obj
instanceof
Date
)
{
return
DateUtil
.
format
((
Date
)
obj
);
}
else
{
return
String
.
valueOf
(
obj
);
}
}
public
static
String
formatLength
(
Integer
nNo
,
String
format
)
{
return
formatLength
(
String
.
valueOf
(
nNo
),
format
);
}
public
static
String
formatLength
(
Long
nNo
,
String
format
)
{
return
formatLength
(
String
.
valueOf
(
nNo
),
format
);
}
public
static
String
formatLength
(
String
sNo
,
String
format
)
{
Integer
end
=
(
format
.
length
()
>
sNo
.
length
()
?
(
format
.
length
()
-
sNo
.
length
())
:
0
);
return
format
.
substring
(
0
,
end
)
+
sNo
;
}
public
static
String
toJson
(
Object
object
)
{
return
GsonUtil
.
toJson
(
object
);
}
public
static
String
trim
(
String
string
,
String
...
strs
)
{
String
tmp
=
string
;
for
(
String
str
:
strs
)
{
while
(
tmp
.
startsWith
(
str
))
{
tmp
=
tmp
.
substring
(
1
);
}
while
(
tmp
.
endsWith
(
str
))
{
tmp
=
tmp
.
substring
(
0
,
tmp
.
length
()
-
1
);
}
}
return
tmp
;
}
public
static
String
decodeBase64AsString
(
String
base64String
)
{
return
new
String
(
decodeBase64String
(
base64String
));
}
public
static
String
encodeBase64String
(
String
string
)
{
return
encodeBase64String
(
string
.
getBytes
());
}
public
static
String
encodeBase64String
(
byte
[]
bytes
)
{
return
new
String
(
Base64
.
encodeBase64
(
bytes
));
}
public
static
String
decodeHexAsString
(
String
hexString
)
{
return
new
String
(
decodeHexString
(
hexString
));
}
public
static
String
encodeHexString
(
String
string
)
{
return
encodeHexString
(
string
.
getBytes
());
}
public
static
String
encodeHexString
(
byte
[]
bytes
)
{
return
Hex
.
encodeHexString
(
bytes
);
}
public
static
byte
[]
decodeBase64String
(
String
base64String
)
{
return
Base64
.
decodeBase64
(
base64String
);
}
public
static
byte
[]
decodeHexString
(
String
hexString
)
{
try
{
return
Hex
.
decodeHex
(
hexString
.
toCharArray
());
}
catch
(
DecoderException
e
)
{
throw
new
CharsetException
(
e
);
}
}
public
static
String
toSHA1String
(
String
text
)
{
try
{
MessageDigest
messageDigest
=
MessageDigest
.
getInstance
(
"SHA1"
);
messageDigest
.
update
(
text
.
getBytes
());
byte
[]
bytes
=
messageDigest
.
digest
();
StringBuffer
hexString
=
new
StringBuffer
();
for
(
int
i
=
0
;
i
<
bytes
.
length
;
i
++)
{
String
shaHex
=
Integer
.
toHexString
(
bytes
[
i
]
&
0xFF
);
if
(
shaHex
.
length
()
<
2
)
{
hexString
.
append
(
0
);
}
hexString
.
append
(
shaHex
);
}
return
hexString
.
toString
().
toUpperCase
();
}
catch
(
Exception
e
)
{
throw
new
SHA1Exception
(
e
);
}
}
public
static
String
toHMACSHA1String
(
String
encryptText
,
String
encryptKey
)
{
try
{
SecretKey
secretKey
=
new
SecretKeySpec
(
encryptKey
.
getBytes
(),
"HmacSHA1"
);
Mac
mac
=
Mac
.
getInstance
(
secretKey
.
getAlgorithm
());
mac
.
init
(
secretKey
);
byte
[]
bs
=
mac
.
doFinal
(
encryptText
.
getBytes
());
return
Base64
.
encodeBase64String
(
bs
);
}
catch
(
Exception
e
)
{
throw
new
SHA1Exception
(
e
);
}
}
public
static
String
toMD5HexString
(
String
text
)
{
try
{
return
StringUtil
.
encodeHexString
(
MessageDigest
.
getInstance
(
"MD5"
).
digest
(
text
.
getBytes
())).
toUpperCase
();
}
catch
(
Exception
e
)
{
throw
new
MD5Exception
(
e
);
}
}
public
static
String
toMD5Base64String
(
String
text
)
{
try
{
return
StringUtil
.
encodeBase64String
(
MessageDigest
.
getInstance
(
"MD5"
).
digest
(
text
.
getBytes
()));
}
catch
(
Exception
e
)
{
throw
new
MD5Exception
(
e
);
}
}
public
static
String
getUid
()
{
return
UUID
.
randomUUID
().
toString
().
replaceAll
(
"-"
,
""
).
toUpperCase
();
}
public
static
String
getId
(
Integer
length
,
String
prefix
)
{
if
(
prefix
==
null
)
{
prefix
=
""
;
}
if
(
length
==
null
)
{
length
=
32
;
}
Integer
i
=
length
-
prefix
.
length
()
-
17
;
return
prefix
+
DateUtil
.
format
(
new
Date
(),
"yyyyMMddHHmmssSSS"
)
+
(
i
<=
0
?
""
:
MathUtil
.
random
(
i
));
}
public
static
String
getId
(
String
prefix
)
{
return
getId
(
32
,
prefix
);
}
public
static
String
getId
(
Integer
length
)
{
return
getId
(
length
,
""
);
}
public
static
String
getId
()
{
return
getId
(
32
,
""
);
}
public
static
String
[]
search
(
String
string
,
String
regex
)
{
return
StringUtil
.
search
(
string
,
regex
,
null
);
}
public
static
String
[]
search
(
String
string
,
String
regex
,
Integer
groupNo
)
{
Pattern
pattern
=
Pattern
.
compile
(
regex
);
Matcher
matcher
=
pattern
.
matcher
(
string
);
List
<
String
>
list
=
new
ArrayList
<
String
>();
while
(
matcher
.
find
())
{
if
(
groupNo
!=
null
)
{
list
.
add
(
matcher
.
group
(
groupNo
));
}
else
{
list
.
add
(
matcher
.
group
(
0
));
}
}
return
list
.
toArray
(
new
String
[
list
.
size
()]);
}
public
static
String
[]
searchNumber
(
String
string
)
{
List
<
String
>
numbers
=
new
ArrayList
<
String
>();
Pattern
pattern
=
Pattern
.
compile
(
"[\\d]+(\\.?[\\d]+)?"
);
Matcher
matcher
=
pattern
.
matcher
(
string
);
while
(
matcher
.
find
())
{
numbers
.
add
(
matcher
.
group
(
0
));
}
return
numbers
.
toArray
(
new
String
[
numbers
.
size
()]);
}
/**
*
* @Description 从BufferedReader对象中读取字符串或文本
* @param reader
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
read
(
BufferedReader
reader
)
{
try
{
StringBuffer
sb
=
new
StringBuffer
();
String
line
=
null
;
while
((
line
=
reader
.
readLine
())
!=
null
)
{
sb
.
append
(
line
+
System
.
getProperty
(
"line.separator"
));
}
return
sb
.
toString
();
}
catch
(
IOException
e
)
{
e
.
printStackTrace
();
}
return
""
;
}
/**
*
* @Title: doMD5Sign
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param: @param map
* @param: @return
* @return: String
* @throws
*/
public
static
String
doMD5Sign
(
Map
<
String
,
String
>
map
){
Map
<
String
,
String
>
compMap
=
new
TreeMap
<
String
,
String
>(
new
Comparator
<
String
>()
{
public
int
compare
(
String
obj1
,
String
obj2
)
{
return
obj1
.
compareTo
(
obj2
);
}
});
for
(
Entry
<
String
,
String
>
entry
:
map
.
entrySet
()){
compMap
.
put
(
entry
.
getKey
(),
entry
.
getValue
());
}
StringBuffer
sb
=
new
StringBuffer
();
for
(
Entry
<
String
,
String
>
entry
:
compMap
.
entrySet
()){
sb
.
append
(
"&"
);
sb
.
append
(
entry
.
getKey
());
sb
.
append
(
"="
);
sb
.
append
(
entry
.
getValue
());
}
String
s
=
sb
.
toString
().
substring
(
1
);
byte
[]
secretBytes
=
null
;
try
{
secretBytes
=
MessageDigest
.
getInstance
(
"MD5"
).
digest
(
s
.
getBytes
());
}
catch
(
NoSuchAlgorithmException
e
)
{
// TODO Auto-generated catch block
e
.
printStackTrace
();
}
String
sign
=
Hex
.
encodeHexString
(
secretBytes
).
toUpperCase
();
return
sign
;
}
public
static
String
getRandom
(
int
num
){
return
String
.
valueOf
(
Math
.
random
()).
substring
(
2
,
2
+
num
);
}
/**
* 获取随机字符串
* @return
*/
public
static
String
getNonceStr
()
{
// 随机数
String
currTime
=
DateUtil
.
format
(
new
Date
(),
DateUtil
.
FMT_YYYYMMddHHMMSS
);
// 8位日期
String
strTime
=
currTime
.
substring
(
8
,
currTime
.
length
());
// 四位随机数
String
strRandom
=
getRandom
(
4
)
+
""
;
// 10位序列号,可以自行调整。
return
strTime
+
strRandom
;
}
public
static
final
String
inputStream2String
(
InputStream
in
)
throws
UnsupportedEncodingException
,
IOException
{
if
(
in
==
null
)
return
""
;
StringBuffer
out
=
new
StringBuffer
();
byte
[]
b
=
new
byte
[
4096
];
for
(
int
n
;
(
n
=
in
.
read
(
b
))
!=
-
1
;)
{
out
.
append
(
new
String
(
b
,
0
,
n
,
"UTF-8"
));
}
return
out
.
toString
();
}
/**
*
* @Description 字节数组转16进制字符串
* @param bytes
* @return
* @author 曲欣亮
* @date 2016年4月25日
* @since 2016年4月25日
* @return String
* @throws
*/
public
static
String
bytesToHex
(
byte
[]
bytes
)
{
return
Hex
.
encodeHexString
(
bytes
);
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment