使用:
EmojiFilter.filterEmoji(weiUserInfo.getNickname());
过滤特殊字符代码
过滤emoji(表情) 或者 其他非文字类型的字符
/**
* 过滤emoji表情与非emoji表情
* @author suzhenwei
*
*/
public class EmojiFilter {
/**
* 过滤emoji 或者 其他非文字类型的字符
* @param source 需要过滤的字符串
* @return
*/
public static String filterEmoji(String source) {
if (!containsEmoji(source)) {
return source;
}
StringBuilder buf = null;
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (notisEmojiCharacter(codePoint)) {
if (buf == null) {
buf = new StringBuilder(source.length());
}
buf.append(codePoint);
}
}
if (buf == null) {
return "";
} else {
if (buf.length() == len) {
buf = null;
return source;
} else {
return buf.toString();
}
}
}
/**
* 检测是否有emoji字符
* @param source 需要判断的字符串
* @return 一旦含有就抛出
*/
public static boolean containsEmoji(String source) {
int len = source.length();
for (int i = 0; i < len; i++) {
char codePoint = source.charAt(i);
if (!notisEmojiCharacter(codePoint)) {
return true;
}
}
return false;
}
/**
* 非emoji表情字符判断
* @param codePoint
* @return
*/
public static boolean notisEmojiCharacter(char codePoint) {
return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD)
|| ((codePoint >= 0x20) && (codePoint <= 0xD7FF)) || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
}
}
替换特殊字符的代码
<dependency>
<groupId>com.vdurmont</groupId>
<artifactId>emoji-java</artifactId>
<version>3.1.3</version>
</dependency>
import com.vdurmont.emoji.EmojiParser;
import org.apache.commons.lang.StringUtils;
import java.util.List;
/**
* 表情处理工具
*
* @Author: szw
* @Date: 2020/9/15 11:27
*/
public class FilterEmojiUtil extends EmojiParser {
/**
* 获取非表情字符串
*
* @param input String
* @return String
*/
public static String getNonEmojiString(String input) {
int prev = 0;
StringBuilder sb = new StringBuilder();
List<EmojiParser.UnicodeCandidate> replacements = getUnicodeCandidates(input);
for (EmojiParser.UnicodeCandidate candidate : replacements) {
sb.append(input.substring(prev, candidate.getEmojiStartIndex()));
prev = candidate.getFitzpatrickEndIndex();
}
return sb.append(input.substring(prev)).toString();
}
/**
* 获取表情字符串
*
* @param input String
* @return String
*/
public static String getEmojiUnicodeString(String input) {
EmojiParser.EmojiTransformer transformer = unicodeCandidate -> unicodeCandidate.getEmoji().getHtmlHexadecimal();
StringBuilder sb = new StringBuilder();
List<EmojiParser.UnicodeCandidate> replacements = getUnicodeCandidates(input);
for (EmojiParser.UnicodeCandidate candidate : replacements) {
sb.append(transformer.transform(candidate));
}
return parseToUnicode(sb.toString());
}
public static String getUnicode(String source) {
String returnUniCode = null;
String uniCodeTemp;
for (int i = 0; i < source.length(); i++) {
uniCodeTemp = "\\u" + Integer.toHexString(source.charAt(i));
returnUniCode = returnUniCode == null ? uniCodeTemp : returnUniCode + uniCodeTemp;
}
return returnUniCode;
}
/**
* emoji表情替换
*
* @param source 原字符串
* @param slipStr emoji表情替换成的字符串
* @return 过滤后的字符串
*/
public static String filterEmoji(String source, String slipStr) {
if (StringUtils.isNotBlank(source)) {
return source.replaceAll("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]", slipStr);
} else {
return source;
}
}
/**
* 判断是否包含emoji表情
*
* @param source 原字符串
* // @param slipStr emoji表情替换成的字符串
* @return 过滤后的字符串
*/
public static boolean checkEmoji(String source) {
if (StringUtils.isNotBlank(source)) {
return source.matches("[\\ud800\\udc00-\\udbff\\udfff\\ud800-\\udfff]");
} else {
return false;
}
}
public static void main(String[] args) {
String content = "带表情的\uD83D\uDE41\uD83D\uDE2B\uD83E\uDD14\uD83D\uDE10";
System.out.println(getEmojiUnicodeString(content));
//转换表情
if (StringUtils.isNotBlank(getEmojiUnicodeString(content))) {
String hexadecimal = EmojiParser.parseToHtmlHexadecimal(content);
System.out.println(hexadecimal);
//转换表情
String interactContent = EmojiParser.parseToUnicode(hexadecimal);
System.out.println(interactContent);
}
}
}
Java Url编码转换
public static String getURLEncoderString(String str) {
String result = "";
if (null == str) {
return "";
}
try {
result = java.net.URLEncoder.encode(str, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
public static String URLDecoderString(String str) {
String result = "";
if (null == str) {
return "";
}
try {
result = java.net.URLDecoder.decode(str, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}