- 目的描述 现在开过过程中,需要把大括号的内容,替换成对象属性值。
例如,我想把它
/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);
}
}