docx 내 ooxml 코드를 직접 만져서 요소를 추가 및 제거하는 과정에서 ooxml에서 사용하는 아이디 형태가 8자리 16진수 문자열이길래 랜덤함수로 만들어 쓰기 !
랜덤 n자리수 16진수 문자열 만드는 메소드
private String getRandom8BitHexString(n) {
String hexString = "";
for (int i=0; i<n; i++) {
hexString += Integer.toHexString((int) (Math.random() * 16) + 1).toUpperCase();
}
return hexString;
}
소스 코드 예시
public List<String> getCommentId(String xml) {
List<String> newCommentIds = new ArrayList<>();
Pattern p1 = Pattern.compile(":paraId=\"(.*?)\".*?:durableId=\"(.*?)\"/>");
Matcher m1 = p1.matcher(xml);
List<String> usedIds = new ArrayList<>();
while(m1.find()) {
usedIds.add(m1.group(1));
usedIds.add(m1.group(2));
}
String hs = getRandom8BitHexString();
// 이미 사용된 아이디와 같으면 다시 랜덤 함수 돌리기
for(String id : usedIds) {
if(hs == id) hs = getRandom8BitHexString();
}
newCommentIds.add(hs);
newCommentIds.add(hs);
return newCommentIds;
}
/* 8bit hex string id 생성 */
private String getRandom8BitHexString() {
String hexString = "";
for (int i=0; i<8; i++) {
// 문자가 섞이면 commentExtended not working
hexString += Integer.toHexString((int) (Math.random() * 9) + 1).toUpperCase();
}
return hexString;
}
'프로그래밍 언어 > Java' 카테고리의 다른 글
Java) java.util.regex.Matcher method 정리 (0) | 2022.04.20 |
---|---|
Java) 정규식과 StringBuffer를 이용하여 문자열 특정 위치만 치환하기 (0) | 2022.03.24 |
Java) 자바로 shell script 실행하기 (0) | 2022.02.10 |
Java) JSON body와 함께 HTTP POST 요청 보내기 (0) | 2022.02.07 |
Java) URL로 파일 다운받아 로컬에 저장하기 (0) | 2022.01.19 |