跳至主要內容

Java 常用代码片段

Siona大约 2 分钟

Java 常用代码片段

雪花 id

dto.setId("data" + IdUtil.getSnowflakeNextId());

// result: data1762308343244185600

// 所属 jar 
// cn.hutool.core.util
// public class IdUtil
// Maven: cn.hutool:hutool-all:5.8.22 (hutool-all-5.8.22.jar)

version 版本

// 后面是时间戳
versionControl.setVersion(version + "-" + LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli());

// result: GCXS20231126-1709002025792

判空操作

/**
* 字符串判空
* org.springframework.util
* public abstract class StringUtils
* Maven: org.springframework:spring-core:5.3.31 (spring-core-5.3.31.jar)
*/
String str = "xxx";
if (StringUtils.hasLength(verifyInfo)) {}


/**
* List<String> 集合判空
* org.springframework.util
* public abstract class CollectionUtils
* Maven: org.springframework:spring-core:5.3.31 (spring-core-5.3.31.jar)
*/
List<String> list = new ArrayList<>();
if (!CollectionUtils.isEmpty(list)) {}

json

/**
* com.alibaba.fastjson

public class JSONArray
extends com.alibaba.fastjson.JSON
implements java.util.List<Object>, java.io.Serializable, Cloneable

public class JSONObject extends com.alibaba.fastjson.JSON
implements java.util.Map<String, Object>,
           Cloneable,
           java.io.Serializable,
           java.lang.reflect.InvocationHandler,
           com.alibaba.fastjson2.util.Wrapper

* Maven: com.alibaba:fastjson:2.0.42 (fastjson-2.0.42.jar)
*/
JSONArray array = new JSONArray();
JSONObject obj = new JSONObject();
obj.put("type", "NotComplatedVariable");
obj.put("variables", "a, b, c");
array.add(obj);

return array.isEmpty() ? null : array.toJSONString();

log 日志

@Slf4j
public class MyClass {
    public void test() {
        log.info("当前记录 id -> {}", id);
    }
}

正则表达式

String xmlContent = "        <w:r><w:t>${contract_</w:t></w:r>
        <w:r><w:t>number</w:t></w:r>
        <w:r><w:t>}</w:t></w:r>";
xmlContent = xmlContent.replaceAll(">\\s+<", "><");

/**
 * 验证 xml 变量是否完整
 * @param xmlFilePath
 * @return
 * @throws IOException
 */
public static List<String> verifyXMLVariable(String xmlFilePath) throws IOException {
    String xmlContent = Files.readString(Paths.get(xmlFilePath));

    // 所有完整的 ${name}
    List<String> completedVariableList = XmlUtil.extractCompletedVariable(xmlContent);

    // 去掉格式化产生的空格,移除 xml 标签,提取变量
    xmlContent = xmlContent.replaceAll(">\\s+<", "><");
    String removeXmlTagsResult = XmlUtil.removeXmlTags(xmlContent);
    List<String> variableList = XmlUtil.extractVariable(removeXmlTagsResult);

    // 不正确的变量
    List<String> differenceList = variableList
            .stream()
            .filter(e -> !completedVariableList.contains(e))
            .collect(Collectors.toList());

    return differenceList;
}

// XmlUtil.java
public static String removeXmlTags(String xmlContent) {
    // 正则表达式用于匹配XML标签
    String regex = "<[^>]*>";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(xmlContent);

    // 用空串替换所有匹配到的XML标签
    String result = matcher.replaceAll("");
    return result;
}
    
public static List<String> extractVariable(String xmlContent) {
    // 使用正则表达式提取 ${name} 变量
    String regex = "\\$(\\{?)([a-zA-Z_][a-zA-Z0-9_]*)(}?|^$)";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(xmlContent);

    List<String> variableList = new ArrayList<>();

    // 遍历匹配到的变量
    while (matcher.find()) {
        variableList.add(matcher.group(2));
    }
    return variableList;
}
    
public static List<String> extractCompletedVariable(String xmlContent) {
    // 定义正则表达式匹配规则
    // 返回所有的 ${name} → 只返回完整的
    String regex = "\\$\\{([a-zA-Z_][a-zA-Z0-9_]*)\\}";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(xmlContent);

    List<String> completedVariableList = new ArrayList<>();

    // 查找匹配的内容
    while (matcher.find()) {
        completedVariableList.add(matcher.group(1));
    }
    return completedVariableList;
}

stream 流

List<String> AList = new ArrayList<>();
AList.add("a");
AList.add("b");

List<String> BList = new ArrayList<>();
BList.add("a");
BList.add("b");
BList.add("c");

/**
* 求异:AList 有,BList 没有的值
* result: differentList = ["c"]
*/
List<String> differenceList = AList
            .stream()
            .filter(e -> !BList.contains(e))
            .collect(Collectors.toList());