Java 大括号的内容,替换成对象属性值

170 阅读1分钟
  • 目的描述 现在开过过程中,需要把大括号的内容,替换成对象属性值。

例如,我想把它 /platform/recordlist/{recordMethod}/{cameraCode}/{domainCode}/{startTime}/{endTime}/{fromIndex}/{toIndex}

变成它 /platform/recordlist/meth/cam/asd/202/201/inde/111

  • 上代码
@Data
public class RequestPlaybackDto {
    private String recordMethod;
    private String cameraCode;
    private String domainCode;
    private String startTime;
    private String endTime;
    private String fromIndex;
    private String toIndex;
}
public class StringReplaceUtils {

    private static final String BRACES_LEFT = "{";
    private static final String BRACES_RIGHT = "}";

    private static void loadList(String string, int left, int right, List<String> list) {
        int currLeft = string.indexOf(BRACES_LEFT, left);
        int currRight = string.indexOf(BRACES_RIGHT, right);
        if (currLeft == -1 || currRight == -1) {
            return;
        }
        String substring = string.substring(currLeft + 1, currRight);
        list.add(substring);
        loadList(string, currLeft + 1, currRight + 1, list);
    }

    public static String replace(String string, Object object) {
        List<String> list = new LinkedList<>();
        loadList(string, 0, 0, list);

        String replace = string + "";
        for (String s : list) {
            try {
                Field field = object.getClass().getDeclaredField(s);
                field.setAccessible(true);
                Object o = field.get(object);
                if (o != null) {
                    replace = replace.replace(BRACES_LEFT + s + BRACES_RIGHT, (CharSequence) o);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return replace;
    }

    public static void main(String[] args) {
        String s = "/platform/recordlist/{recordMethod}/{cameraCode}/{domainCode}/{startTime}/{endTime}/{fromIndex}/{toIndex}";

        RequestPlaybackDto requestPlaybackDto = new RequestPlaybackDto();
        requestPlaybackDto.setDomainCode("asd");
        requestPlaybackDto.setCameraCode("cam");
        requestPlaybackDto.setEndTime("201");
        requestPlaybackDto.setFromIndex("inde");
        requestPlaybackDto.setStartTime("202");
        requestPlaybackDto.setRecordMethod("meth");
        requestPlaybackDto.setToIndex("111");

        String replace = replace(s, requestPlaybackDto);
        System.out.println(replace);
    }
}