본문 바로가기

프로그래밍 언어/Java

Java) 랜덤 아이디 만들기 - n자리수 16진수 문자열 만들기

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;
	}