728x90
구글링 해보면 간단한 소스가 정말 많음
내가 처음 필요했던 건 웹에서 hex값과 인코딩 타입을 java단에 넘겨가지고 string으로 변환해서 다시 웹단에 넘겨준 후 화면에 보여주는 거라 딱 세줄 이면 가능한 소스가 있길래 사용함
String hex = param.get("hex").toString();
String type = param.get("type").toString(); //웹에선 UTF-8, EUC-KR 같은 값을 넘겨줌
byte[] bytes = Hex.decodeHex(hex.toCharArray());
String st = new String (bytes, type);
return st;
더 찾아보니 더 간단한 소스들도 꽤 많이 보였음
이 결괏값을 웹단에서 받은 뒤 따로 받은 포지션 값을 (예: ["11 25", "50 55"]) 이용해 문자 사이사이에 html태그를 삽입해 하이라이트 처리를 했으나 문제가 좀 발견이 되가지고...
자바단에서 모두 처리하게 변경함
1. 웹단에서 hex값, 인코딩 타입, 포지션 값을 넘김
2. 전달받은 포지션 값을 시작 숫자랑 끝 숫자를 따로따로 저장
3. hex값을 2개씩 문자로 변환해서 한 글자씩 만들 때 인코딩 타입을 이용해서 변환
4. for문을 돌면서 시작 숫자랑 같으면 html 태그 앞에 껄 삽입, 뒷 숫자랑 같으면 html 종료 태그 삽입
이런 식으로 한 글자씩 조합시키는 방식이 필요해서 만듦
StringBuilder sb = new StringBuilder();
String front = "<span style=\"background-color:#e25d5d;\">"; //하이라이트용 html 시작 태그
String end = "</span>"; //하이라이트 종료 태그
ArrayList<Integer> start_num = new ArrayList<>();
ArrayList<Integer> end_num = new ArrayList<>();
for (int i = 0; i < pos.size(); i++) {
String pos_str = pos.get(i).toString();
start_num.add(Integer.parseInt(pos_str.split(" ")[0].toString())); //시작 숫자 담기
end_num.add(Integer.parseInt(pos_str.split(" ")[1].toString())); //종료 숫자 담기
}
/*
* 값에 html 태그가 들어있으면 화면에 뿌릴 때
* html 태그가 먹혀서 문제가 생길 수도있어서 변환하기 위한 작업
* < 또는 > 는 ' 로 변환 시키기위한 준비
*/
Pattern pattern = Pattern.compile("[<|>]");
Matcher match;
Boolean bool;
int j = 0;
char[] charArr = hex.toCharArray();
for (int i = 0; i < charArr.length; i+=2) {
if (start_num.contains(j)) { // 시작 숫자랑 같으면 넣기
sb.append(front);
}
String str = "" + charArr[i] + "" charArr[i + 1]; //hex값 2개
char ch = (char) Integer.parseInt(str, 16); // 변환
String str2 = new String(Character.toString(ch).getBytes(), type); //바이트로 바꿔서 인코딩 타입을 이용해 스트링으로 변환
match = pattern.matcher(str2); //변환된 값에 < 또는 > 가 있는지 확인
bool = match.matches(); // 있으면 true 없으면 false
if (bool) { // 있으면?
sb.append("'");
} else { // 없으면?
sb.append(str2);
}
if (end_num.contains(j)) {//종료 숫자랑 같으면 넣기
sb.append(end);
}
j++;
}
rs = sb.toString();
통으로 변환할 때 인코딩 타입을 이용하거나 한 글자씩 처리하는 건 많았는데
한 글자씩 처리하면서 인코딩 타입을 이용하는 건 도저히 못 찾겠어서
하나씩 찾아서 짬뽕하다 보니 만들긴 했는데
제대로 만든 건진 모르겠다... 그래도 일단 기존 문제는 해결됐고 잘된다.
이런 식으로 한 글자씩 처리하면서 할게 아니라면 쉽고 좋은 소스가 많으니 이런 방법도 있구나 정도만 보면 될 듯...
반응형
'JAVA' 카테고리의 다른 글
[JAVA] String을 Boolean으로 변환하기 (0) | 2019.09.05 |
---|---|
[JAVA] 정규식 사용 (Pattern.matches) (0) | 2019.07.24 |
[JAVA] Calendar 함수를 이용한 날짜 구하기 (0) | 2019.06.05 |
로그인 관련해서 IP를 사용할 때 0:0:0:0:0:0:0:1 뜨는 이유 (0) | 2019.06.05 |
[Java] HashMap에서 key 값 구하기 (0) | 2018.08.07 |