各种常用工具类
格式类
将字符串转化成unicode码
/**
* 将字符串转化成unicode码
* @author shuai.ding
* @param string
* @return
*/
public static String string2Unicode(String string) {
if (StringUtils.isBlank(string)) {
return null;
}
char[] bytes = string.toCharArray();
StringBuffer unicode = new StringBuffer();
for (int i = 0; i < bytes.length; i++) {
char c = bytes[i];
// 标准ASCII范围内的字符,直接输出
if (c >= 0 && c <= 127) {
unicode.append(c);
continue;
}
String hexString = Integer.toHexString(bytes[i]);
unicode.append("\\u");
// 不够四位进行补0操作
if (hexString.length() < 4) {
unicode.append("0000".substring(hexString.length(), 4));
}
unicode.append(hexString);
}
return unicode.toString();
}
查询字符串中的所有中文字符
/**
* 查询字符串中的所有中文字符
* @param string
* @return
*/
public static List<String> readChinese(String string){
List<String> result = new ArrayList<>();
Pattern pattern = Pattern.compile("([\u4e00-\u9fa5]+)");
Matcher matcher = pattern.matcher(string);
while (matcher.find()){
//获取这个字符串中所有连续的中文字符串
result.add(matcher.group());
}
return result;
}
xml转json
public static JSONObject xml2Json(String xmlStr) {
Document doc;
try {
doc = DocumentHelper.parseText(xmlStr);
JSONObject json = new JSONObject();
dom4j2Json(doc.getRootElement(), json);
return json;
} catch (DocumentException e) {
e.printStackTrace();
return null;
}
}
/**
* xml转json
*
* @param element
* @param json
*/
public static void dom4j2Json(Element element, JSONObject json) {
//如果是属性
for(Object o:element.attributes()){
Attribute attr=(Attribute)o;
json.put("@"+attr.getName(), attr.getValue());
}
List<Element> chdEl=element.elements();
if(chdEl.isEmpty()){//第一个节点,没子元素
json.put(element.getName(), element.getText());
}
for(Element e:chdEl){//有子元素
if(!e.elements().isEmpty()){//子元素也有子元素
JSONObject chdjson=new JSONObject();
dom4j2Json(e,chdjson);
Object o=json.get(e.getName());
if(o!=null){
JSONArray jsona=null;
if(o instanceof JSONObject){//如果此元素已存在,则转为jsonArray
JSONObject jsono=(JSONObject)o;
json.remove(e.getName());
jsona=new JSONArray();
jsona.add(jsono);
jsona.add(chdjson);
}
if(o instanceof JSONArray){
jsona=(JSONArray)o;
jsona.add(chdjson);
}
json.put(e.getName(), jsona);
}else{
if(!chdjson.isEmpty()){
json.put(e.getName(), chdjson);
}
}
}else{//子元素没有子元素
for(Object o:element.attributes()){//属性值
Attribute attr=(Attribute)o;
json.put("@"+attr.getName(), attr.getValue());
}
json.put(e.getName(), e.getText());//本身值
}
}
}
将xml文件压缩(去掉空格与换行)
public static String convertFromXml(String str) {
boolean flag = true;
boolean quotesFlag = true;
StringBuffer ans = new StringBuffer();
String tmp = "";
for (int i = 0; i < str.length(); i++) {
if ('"' == str.charAt(i)) {
ans.append(str.charAt(i));
quotesFlag = !quotesFlag;
} else if ('<' == str.charAt(i)) {
tmp = tmp.trim();
ans.append(tmp);
flag = true;
ans.append(str.charAt(i));
} else if ('>' == str.charAt(i)) {
if(quotesFlag){
flag = false;
ans.append(str.charAt(i));
tmp = "";
}else{
ans.append(">");
}
} else if (flag) {
ans.append(str.charAt(i));
} else {
tmp += str.charAt(i);
}
}
return ans.toString();
}
将xml文件中的特殊字符转义,防止解析报错
/**
* 处理xml中的特殊字符
* @param Str
* @return
*/
public static String filterSpecialCharacters(String Str) {
String responseResult = Str;
// 用正则将匹配到的非标签小于号转义
String ltRegex = "<[^<>]*(?:<)";
Pattern p = Pattern.compile(ltRegex);
Matcher m = p.matcher(responseResult);
String replaceStr;
while (m.find()) {
String subStr = m.group();
if (subStr != null && subStr.length() > 0) {
replaceStr = "<" + subStr.substring(1);
responseResult = responseResult.replace(subStr, replaceStr);
}
}
//上面的操作在有多个<号时会识别不到最后一个,再重新match一次找到最后一个<
m = p.matcher(responseResult);
while (m.find()) {
String subStr = m.group();
if (subStr != null && subStr.length() > 0) {
replaceStr = "<" + subStr.substring(1);
responseResult = responseResult.replace(subStr, replaceStr);
}
}
// 用正则将匹配到的非标签大于号转义
String gtRegex = "(?:>)[^<>]*>";
Pattern gtp = Pattern.compile(gtRegex);
Matcher gtm = gtp.matcher(responseResult);
String gtReplaceStr;
while (gtm.find()) {
String subStr = gtm.group();
if (subStr != null && subStr.length() > 0) {
gtReplaceStr = subStr.substring(0, subStr.length() - 1) + ">";
responseResult = responseResult.replace(subStr, gtReplaceStr);
}
}
gtm = gtp.matcher(responseResult);
while (gtm.find()) {
String subStr = gtm.group();
if (subStr != null && subStr.length() > 0) {
gtReplaceStr = subStr.substring(0, subStr.length() - 1) + ">";
responseResult = responseResult.replace(subStr, gtReplaceStr);
}
}
return responseResult;
}
时间类
获取下一天
public static String getNextDate(String stringDate) {
Calendar c = Calendar.getInstance();
Date date = null;
try {
date = new SimpleDateFormat("yy-MM-dd").parse(stringDate);
} catch (Exception e) {
e.printStackTrace();
}
c.setTime(date);
int day1 = c.get(Calendar.DATE);
c.set(Calendar.DATE, day1 + 1);
return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
}
金额类
金额元分转换
/**
* 金额元转换成分
*
* @param
* @return
*/
public static int changeYuanToFen(String yuan) {
if (!StringUtils.isBlank(yuan)) {
BigDecimal a1 = new BigDecimal(yuan);
int a2 = a1.multiply(new BigDecimal(100)).intValue();
return a2;
} else {
return 0;
}
}
/**
* 金额分转元
*
* @param price
* @return
*/
public static String changeFenToYuan(String price) {
try {
return BigDecimal.valueOf(Long.valueOf(price)).divide(new BigDecimal(100)).toString();
} catch (Exception e) {
logger.info("changeFenToYuan异常:{}",e.getMessage());
}
return "";
}
通过身份证号码获取出生日期、性别、年龄
/**
* 通过身份证号码获取出生日期、性别、年龄
* @param certificateNo
* @return 返回的出生日期格式:1990-01-01 性别格式:F-女,M-男
*/
public static Map<String, String> getBirAgeSex(String certificateNo) {
String birthday = "";
String age = "";
String sex = "";
int year = Calendar.getInstance().get(Calendar.YEAR);
char[] number = certificateNo.toCharArray();
boolean flag = true;
if (number.length == 15) {
for (int x = 0; x < number.length; x++) {
if (!flag) return new HashMap<String, String>();
flag = Character.isDigit(number[x]);
}
} else if (number.length == 18) {
for (int x = 0; x < number.length - 1; x++) {
if (!flag) return new HashMap<String, String>();
flag = Character.isDigit(number[x]);
}
}
if (flag && certificateNo.length() == 15) {
birthday = "19" + certificateNo.substring(6, 8) + "-"
+ certificateNo.substring(8, 10) + "-"
+ certificateNo.substring(10, 12);
sex = Integer.parseInt(certificateNo.substring(certificateNo.length() - 3, certificateNo.length())) % 2 == 0 ? "女" : "男";
age = (year - Integer.parseInt("19" + certificateNo.substring(6, 8))) + "";
} else if (flag && certificateNo.length() == 18) {
birthday = certificateNo.substring(6, 10) + "-"
+ certificateNo.substring(10, 12) + "-"
+ certificateNo.substring(12, 14);
sex = Integer.parseInt(certificateNo.substring(certificateNo.length() - 4, certificateNo.length() - 1)) % 2 == 0 ? "女" : "男";
age = (year - Integer.parseInt(certificateNo.substring(6, 10))) + "";
}
Map<String, String> map = new HashMap<String, String>();
map.put("birthday", birthday);
map.put("age", age);
map.put("sex", sex);
return map;
}
排序类
自定义类排序implements Comparable,重写compareTo方法
@Override
public int compareTo(Object o) {
if(o instanceof DBRegisterHistoryVo){
DBRegisterHistoryVo dbRegisterHistoryVo = (DBRegisterHistoryVo) o;
return dbRegisterHistoryVo.getVisitTime().compareTo(this.visitTime);//换时间降序排序
// return this.visitTime.compareTo(dbRegisterHistoryVo.getVisitTime());//换时间升序排序
}
throw new ClassCastException("不能转换为DBRegisterHistoryVo类型的对象...");
}
//调用
Collections.sort(listVo.getItems());
按中文字母排序,处理特殊字符
亲测好用 :https://blog.csdn.net/abcde123_123/article/details/107693404
maven依赖
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
HanyuPinyinOutputFormat pinyinOutputFormat = new HanyuPinyinOutputFormat();
Collections.sort(list1, (o1,o2)-> {
String nameOne = "";
String nameTwo = "";
try {
nameOne = PinyinHelper.toHanYuPinyinString(o1, pinyinOutputFormat, " ", true);
nameTwo = PinyinHelper.toHanYuPinyinString(o2, pinyinOutputFormat, " ", true);
} catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
badHanyuPinyinOutputFormatCombination.printStackTrace();
}
return nameOne.compareTo(nameTwo);
});
文件类
pdf文件转为文件流
/*pdf文件转换为文件流*/
@RequestMapping(value = "/getConvert")
public void getConvert(HttpServletRequest request, HttpServletResponse response) throws Exception {
HcContext context = this.getHcContext(request);
Map<String, Object> params = this.getParameters(request);
LoggerUtil.getLogger(context, logger).info("seq:{},getConvert:{}", context.getMsgSeq(), JSONObject.toJSONString(params));
if (params != null && !params.isEmpty()) {
String destUrl = params.get("pdfUrl").toString();
if (StringUtils.isNotEmpty(destUrl)) {
response.setContentType("application/pdf");
response.setHeader("Access-Control-Allow-Origin", "*"); // 解决请求头跨域问题
ServletOutputStream sos = response.getOutputStream();
URL url = new URL(destUrl);
HttpURLConnection httpUrl = (HttpURLConnection) url.openConnection();
// 连接指定的网络资源
httpUrl.connect();
// 获取网络输入流
BufferedInputStream bis = new BufferedInputStream(httpUrl.getInputStream());
int b;
while ((b = bis.read()) != -1) {
sos.write(b);
}
sos.close(); // 这里有点和c语言里的读取文件有点像
bis.close();
}
}
}
文档类
利用jxl读取excel表格内容
maven依赖
<!-- jxl 操作excel -->
<dependency>
<groupId>org.jxls</groupId>
<artifactId>jxls-jexcel</artifactId>
<version>1.0.6</version>
</dependency>
public static void main(String[] args) throws IOException, BiffException {
List<String> medicineList = new ArrayList<>();
jxl.Workbook wb =null;
//注意这里需将文件另存为xls格式,否则jxl不支持
InputStream is = new FileInputStream("D://需要屏蔽的药品.xls");
wb = Workbook.getWorkbook(is);
int sheetSize = wb.getNumberOfSheets();
Sheet sheet = wb.getSheet(0);
int row_total = sheet.getRows();
for (int j = 1; j < row_total; j++) {
Cell[] cells = sheet.getRow(j);
medicineList.add(cells[0].getContents());
}
System.out.println(medicineList);
}