黑马程序员技术交流社区
标题:
【重庆中心】企业中各种会使用到的工具类之StringUtils重写
[打印本页]
作者:
安之啊
时间:
2018-1-16 16:45
标题:
【重庆中心】企业中各种会使用到的工具类之StringUtils重写
/**
*
@author
anzhi
*
@date
2018/1/16
*
@desc
字符串工具类, 继承org.apache.commons.lang3.StringUtils类
*/
public class
StringUtils
extends
org.apache.commons.lang3.StringUtils {
private static final char
SEPARATOR
=
'_'
;
private static final
String
CHARSET_NAME
=
"UTF-8"
;
/**
* 是否包含字符串
*
@param
str
验证字符串
*
@param
strs
字符串组
*
@return
包含返回true
*/
public static boolean
inString
(String str
,
String... strs){
if
(str !=
null
){
for
(String s : strs){
if
(str.equals(
trim
(s))){
return true;
}
}
}
return false;
}
/**
* 替换掉HTML标签方法
*/
public static
String
replaceHtml
(String html) {
if
(
isBlank
(html)){
return
""
;
}
String regEx =
"<.+?>"
;
Pattern p = Pattern.
compile
(regEx)
;
Matcher m = p.matcher(html)
;
String s = m.replaceAll(
""
)
;
return
s
;
}
/**
* 替换为手机识别的HTML,去掉样式及属性,保留回车。
*
@param
html
*
@return
*/
public static
String
replaceMobileHtml
(String html){
if
(html ==
null
){
return
""
;
}
return
html.replaceAll(
"<([a-z]+?)
\\
s+?.*?>"
,
"<$1>"
)
;
}
/**
* 替换为手机识别的HTML,去掉样式及属性,保留回车。
*
@param
txt
*
@return
*/
public static
String
toHtml
(String txt){
if
(txt ==
null
){
return
""
;
}
return
replace
(
replace
(Encodes.
escapeHtml
(txt)
,
"
\n
"
,
"<br/>"
)
,
"
\t
"
,
" "
)
;
}
/**
* 缩略字符串(不区分中英文字符)
*
@param
str
目标字符串
*
@param
length
截取长度
*
@return
*/
public static
String
abbr
(String str
, int
length) {
if
(str ==
null
) {
return
""
;
}
try
{
StringBuilder sb =
new
StringBuilder()
;
int
currentLength =
0
;
for
(
char
c :
replaceHtml
(StringEscapeUtils.
unescapeHtml4
(str)).toCharArray()) {
currentLength += String.
valueOf
(c).getBytes(
"GBK"
).
length
;
if
(currentLength <= length -
3
) {
sb.append(c)
;
}
else
{
sb.append(
"..."
)
;
break;
}
}
return
sb.toString()
;
}
catch
(UnsupportedEncodingException e) {
e.printStackTrace()
;
}
return
""
;
}
public static
String
abbr2
(String param
, int
length) {
if
(param ==
null
) {
return
""
;
}
StringBuffer result =
new
StringBuffer()
;
int
n =
0
;
char
temp
;
boolean
isCode =
false;
// 是不是HTML代码
boolean
isHTML =
false;
// 是不是HTML特殊字符,如
for
(
int
i =
0
;
i < param.length()
;
i++) {
temp = param.charAt(i)
;
if
(temp ==
'<'
) {
isCode =
true;
}
else if
(temp ==
'&'
) {
isHTML =
true;
}
else if
(temp ==
'>'
&& isCode) {
n = n -
1
;
isCode =
false;
}
else if
(temp ==
';'
&& isHTML) {
isHTML =
false;
}
try
{
if
(!isCode && !isHTML) {
n += String.
valueOf
(temp).getBytes(
"GBK"
).
length
;
}
}
catch
(UnsupportedEncodingException e) {
e.printStackTrace()
;
}
if
(n <= length -
3
) {
result.append(temp)
;
}
else
{
result.append(
"..."
)
;
break;
}
}
// 取出截取字符串中的HTML标记
String temp_result = result.toString().replaceAll(
"(>)[^<>]*(<?)"
,
"$1$2"
)
;
// 去掉不需要结素标记的HTML标记
temp_result = temp_result
.replaceAll(
"</?(AREA|BASE|BASEFONT|BODY|BR|COL|COLGROUP|DD|DT|FRAME|HEAD|HR|HTML|IMG|INPUT|ISINDEX|LI|LINK|META|OPTION|P|PARAM|TBODY|TD|TFOOT|TH|THEAD|TR|area|base|basefont|body|br|col|colgroup|dd|dt|frame|head|hr|html|img|input|isindex|li|link|meta|option|p|param|tbody|td|tfoot|th|thead|tr)[^<>]*/?>"
,
""
)
;
// 去掉成对的HTML标记
temp_result = temp_result.replaceAll(
"<([a-zA-Z]+)[^<>]*>(.*?)</
\\
1>"
,
"$2"
)
;
// 用正则表达式取出标记
Pattern p = Pattern.
compile
(
"<([a-zA-Z]+)[^<>]*>"
)
;
Matcher m = p.matcher(temp_result)
;
List<String> endHTML = Lists.
newArrayList
()
;
while
(m.find()) {
endHTML.add(m.group(
1
))
;
}
// 补全不成对的HTML标记
for
(
int
i = endHTML.size() -
1
;
i >=
0
;
i--) {
result.append(
"</"
)
;
result.append(endHTML.get(i))
;
result.append(
">"
)
;
}
return
result.toString()
;
}
/**
* 获得用户远程地址
*/
public static
String
getRemoteAddr
(HttpServletRequest request){
String remoteAddr = request.getHeader(
"X-Real-IP"
)
;
if
(
isNotBlank
(remoteAddr)) {
remoteAddr = request.getHeader(
"X-Forwarded-For"
)
;
}
else if
(
isNotBlank
(remoteAddr)) {
remoteAddr = request.getHeader(
"Proxy-Client-IP"
)
;
}
else if
(
isNotBlank
(remoteAddr)) {
remoteAddr = request.getHeader(
"WL-Proxy-Client-IP"
)
;
}
return
remoteAddr !=
null
? remoteAddr : request.getRemoteAddr()
;
}
/**
* 驼峰命名法工具
*
@return
* toCamelCase(
"
hello_world
"
) == "helloWorld"
* toCapitalizeCamelCase("hello_world") == "HelloWorld"
* toUnderScoreCase("helloWorld") = "hello_world"
*/
public static
String
toCamelCase
(String s) {
if
(s ==
null
) {
return null;
}
s = s.toLowerCase()
;
StringBuilder sb =
new
StringBuilder(s.length())
;
boolean
upperCase =
false;
for
(
int
i =
0
;
i < s.length()
;
i++) {
char
c = s.charAt(i)
;
if
(c ==
SEPARATOR
) {
upperCase =
true;
}
else if
(upperCase) {
sb.append(Character.
toUpperCase
(c))
;
upperCase =
false;
}
else
{
sb.append(c)
;
}
}
return
sb.toString()
;
}
/**
* 驼峰命名法工具
*
@return
* toCamelCase(
"
hello_world
"
) == "helloWorld"
* toCapitalizeCamelCase("hello_world") == "HelloWorld"
* toUnderScoreCase("helloWorld") = "hello_world"
*/
public static
String
toCapitalizeCamelCase
(String s) {
if
(s ==
null
) {
return null;
}
s =
toCamelCase
(s)
;
return
s.substring(
0
,
1
).toUpperCase() + s.substring(
1
)
;
}
/**
* 驼峰命名法工具
*
@return
* toCamelCase(
"
hello_world
"
) == "helloWorld"
* toCapitalizeCamelCase("hello_world") == "HelloWorld"
* toUnderScoreCase("helloWorld") = "hello_world"
*/
public static
String
toUnderScoreCase
(String s) {
if
(s ==
null
) {
return null;
}
StringBuilder sb =
new
StringBuilder()
;
boolean
upperCase =
false;
for
(
int
i =
0
;
i < s.length()
;
i++) {
char
c = s.charAt(i)
;
boolean
nextUpperCase =
true;
if
(i < (s.length() -
1
)) {
nextUpperCase = Character.
isUpperCase
(s.charAt(i +
1
))
;
}
if
((i >
0
) && Character.
isUpperCase
(c)) {
if
(!upperCase || !nextUpperCase) {
sb.append(
SEPARATOR
)
;
}
upperCase =
true;
}
else
{
upperCase =
false;
}
sb.append(Character.
toLowerCase
(c))
;
}
return
sb.toString()
;
}
}
}
作者:
wheat
时间:
2018-1-16 22:19
不错哦
作者:
xiongliu
时间:
2018-1-22 09:51
厉害了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2