/************************************************************************ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ************************************************************************/ package common.util; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; 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; import org.apache.commons.lang3.StringUtils; import java.io.IOException; import java.io.StringWriter; import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; /** *

* 模板工具类 * * @author CSJ */ public final class TemplateUtil { private TemplateUtil() { } /** * 生成随机32位UUID号 * * @return UUID */ public static final String genUUID() { return UUID.randomUUID().toString().replaceAll("-", ""); } /** * 生成指定对象JSON 格式 * * @return JSON String */ public static final String genJsonStr4Obj(Object obj) { return genJsonStr4Obj(obj, false); } /** * 生成指定对象JSON格式是否包含NULL字段 * * @param obj * @param removeNull * @return */ public static final String genJsonStr4Obj(Object obj, boolean removeNull) { StringWriter sw = new StringWriter(); String jsonStr = "{}"; JsonGenerator jsonGenerator = null; ObjectMapper mapper = new ObjectMapper(); try { if (removeNull) { mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); } jsonGenerator = mapper.getFactory().createGenerator(sw); jsonGenerator.writeObject(obj); jsonStr = sw.toString(); } catch (Exception e) { } finally { if (sw != null) { try { sw.close(); } catch (IOException e) { } finally { sw = null; } } if (jsonGenerator != null) { try { jsonGenerator.close(); } catch (IOException e) { } finally { jsonGenerator = null; } } } return jsonStr; } /** * 反序列化JSON 格式对象 * * @param jsonString * @param clazz * @return */ public static final T genObjFormJson(String jsonString, Class clazz) { if (StringUtils.isEmpty(jsonString)) { return null; } try { return new ObjectMapper().readValue(jsonString, clazz); } catch (IOException e) { return null; } } /** * 反序列化JSON 格式对象(复杂嵌套) * * @param jsonString * @param reference * @return */ public static final T genObjFormJson(String jsonString, TypeReference reference) { if (StringUtils.isEmpty(jsonString)) { return null; } try { return new ObjectMapper().readValue(jsonString, reference); } catch (IOException e) { return null; } } /** * 中文转换成汉语拼音 * * @param chinese * @return */ public static final String getPinYin(String chinese) { if (StringUtils.isEmpty(chinese)) { throw new RuntimeException("请输入要转换中文,不能为空"); } HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); format.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 音标支持HanyuPinyinToneType.WITH_TONE_MARK format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE); char[] input = chinese.trim().toCharArray(); StringBuffer output = new StringBuffer(""); try { for (int i = 0; i < input.length; i++) { if (Character.toString(input[i]).matches("[\u4E00-\u9FA5]+")) { String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format); output.append(temp[0]); output.append(" "); } else { output.append(Character.toString(input[i])); } } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } return output.toString(); } /** * 中文字符转换成首字母拼音 * * @param chinese * @return */ public static final String getPinYin4FirstSpell(String chinese, String split) { if (StringUtils.isEmpty(chinese)) { throw new RuntimeException("请输入要转换中文,不能为空"); } HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat(); format.setCaseType(HanyuPinyinCaseType.LOWERCASE); // 音标支持HanyuPinyinToneType.WITH_TONE_MARK format.setToneType(HanyuPinyinToneType.WITHOUT_TONE); format.setVCharType(HanyuPinyinVCharType.WITH_U_UNICODE); char[] input = chinese.trim().toCharArray(); StringBuffer output = new StringBuffer(""); try { for (int i = 0; i < input.length; i++) { if (Character.toString(input[i]).matches("[\u4E00-\u9FA5]+")) { String[] temp = PinyinHelper.toHanyuPinyinStringArray(input[i], format); output.append(temp[0].charAt(0)); if (StringUtils.isNotEmpty(split)) { output.append(split); } } else { output.append(Character.toString(input[i])); } } } catch (BadHanyuPinyinOutputFormatCombination e) { e.printStackTrace(); } return output.toString(); } public static final String getPinYin4FirstSpell(String chinese) { return getPinYin4FirstSpell(chinese, ""); } /** * 检测文本是否包含中文 * * @param chinese * @return */ public static final boolean isChinese(String chinese) { if (StringUtils.isEmpty(chinese)) { return false; } boolean res = false; char[] input = chinese.trim().toCharArray(); for (int i = 0; i < input.length; i++) { if (Character.toString(input[i]).matches("[\u4E00-\u9FA5]+")) { res = true; break; } } return res; } /** * 检测文本是否只含有英文字符 * * @param inputStr * @return */ public static final boolean isLetter(String inputStr) { if (StringUtils.isEmpty(inputStr)) { return false; } String regx_letter = "[a-zA-Z]+"; Pattern p = Pattern.compile(regx_letter); Matcher m = p.matcher(inputStr); return m.matches(); } /** * 生成encache spring key 可变对象参数方法 * * @param keys * @return */ public static final String genCacheKey4Array(String... keys) { StringBuilder builder = new StringBuilder(); builder.append("["); for (String key : keys) { builder.append(key); } builder.append("]"); return builder.toString(); } /** * 将下划线名称风格替换为驼峰风格 * * @param underlineStr * @return */ public static String underlineToCamelCase(String underlineStr) { Matcher matcher = Pattern.compile("[a-z]_[a-z]").matcher(underlineStr); StringBuilder builder = new StringBuilder(underlineStr); for (int i = 0; matcher.find(); i++) { String group = matcher.group(); String upperCase = group.replaceAll("_[a-z]", group.substring(2).toUpperCase()); builder.replace(matcher.start() - i, matcher.end() - i, upperCase); } if (Character.isUpperCase(builder.charAt(0))) { builder.replace(0, 1, String.valueOf(Character.toLowerCase(builder.charAt(0)))); } return builder.toString(); } }