분류 전체보기
훗~
DSLR
Mac
Reference
private
java에 해당되는 글

Sun Tech Day 2008 Seoul

난데없이 날아온..
Sun Tech Days 2008 Seoul 무료 등록 이벤트 메일..

세상에 꽁짜 마다할 사람 없겠지만..
도대체 무슨 기준으로 어디서 온걸까..싶다..
회사 사람들 거의 다 받으신듯..ㅋㅋ;


이 난데없는 꽁짜가 반갑지 않은 진짜 이유는..
이미 회사에서 등록해줬다..ㅡ,.ㅡ;;

고로.. 필요 없기 때문..




락군

[Java] 상대경로를 절대경로로~

상대 경로를 절대 경로로 바꿔주기

    public static String getCanonicalPath(String relative, String base) {
        String canonicalPath = null;

        File relativeFile = new File(relative);
        if(relativeFile.isAbsolute()) {
            canonicalPath = relativeFile.getAbsolutePath();
        } else {
            File canonicalFile = new File(base, relative);

            try {
                canonicalPath = canonicalFile.getCanonicalPath();
            } catch(IOException e) {
                e.printStackTrace();
            }
        }

        return canonicalPath;
    }

FilePathParser.getCanonicalPath("../../temp.txt", "/Users/Stylekai/Documents/");





락군

[Java] JConsole 문제 해결

현재 실행중인 Java App의
메모리 상태, 쓰레드 상태등을 간단히 알고 싶을때..
JConsole은 상당히 유용한 Util인데..

JConsole을 실행하다 보면,
다음과 같은 메시지가 출력되면서 실행이 안될때가 있다..

사용자 삽입 이미지





왤까 싶어서..
구글링을 좀 해봤더만..

이래서 그렇단다..

사용자 삽입 이미지

간단히 말해서..

JDK 5.0을 사용하면,
vm arguments에 -Dcom.sun.management.jmxremote 를 추가해 주어야 한다..
물론, 6.0을 사용한다면 이런거 할 필요 읍단다..

어쩐지..
이상하게 Mac에서만 안되더라..ㅡ,.ㅡ;;
락군

[Java] 비트 연산

초 간단 비트 연산 Example..

입력받은 수의 각 비트가 1이면 true, 0이면 false출력..

int value = 0x57;
String binaryString = Integer.toBinaryString(value);
while(binaryString.length() % 4 != 0) {
                    binaryString = "0" + binaryString;
          }
        
          System.out.println("Source : " + binaryString);

          for(int i = 0; i < binaryString.length(); i++) {
                    System.out.println("\tbit " + i + " : " + ((value >> i & 1) == 1));
          }

결과 :
          Source : 01010111        
              bit 0 : true
              bit 1 : true
              bit 2 : true
              bit 3 : false
              bit 4 : true
              bit 5 : false
              bit 6 : true
              bit 7 : false

락군

[Java} StringTokenizer와 String.split()

문자열을
특정 Token을 이용해서 분리할 때,
대번에 생각나는 API는 역시 StringTokenizer가 아닐까??


Class StringTokenizer
The string tokenizer class allows an application to break a string into tokens. The tokenization method is much simpler than the one used by the StreamTokenizer class. The StringTokenizer methods do not distinguish among identifiers, numbers, and quoted strings, nor do they recognize and skip comments.

The following is one example of the use of the tokenizer. The code:
     StringTokenizer st = new StringTokenizer("this is a test");
     while (st.hasMoreTokens()) {
         System.out.println(st.nextToken());
     }
 
prints the following output:
     this
     is
     a
     test
(from JDK 5.0 document)

StringTokenizer는
손쉽게 문자열을 특정 Token으로 분리하는 것이 가능하다.

하지만, StringTokenizer를 사용하다 보면, 다음과 같은 문제가 발생할 때가 있다.
아래와 같은 문자열을 분리한다고 하자

박찬호/35/LA다저스//한국

이 문자열을 '/'를 이용해서 분리하게 되면 다음과 같은 결과를 얻을 수 있다.

박찬호
35
LA다저스
한국

Token사이에 값이 없으면 결과에서 생략되는 것을 볼 수 있다.

다음과 같은 문자열을 분리하는 경우르 보자.

source :
영어,한글,중국어,일어
boy,소년,,ボ―イ

output :
영어 -> boy
한글 -> 소년
중국어 -> ボ―イ
일어 -> null

Token을 기준으로 특정 위치에 값이 반드시 들어가야 하는 경우,
StringTokenizer를 사용하면 상당히 귀찮은 노가다성 작업이 필요하게 된다..;;

위와 같은 경우 생략된 값을 처리할 좋은 방법이 없을까?

String class의 split() method를 사용해 보자..

String str = "boy,소년,,ボ―イ";
String[] output = str.split(",");

output :
boy
소년

ボ―イ

생략된 값까지 포함된 배열을 얻을 수 있으므로,
일단, 귀찮은 작업을 해주지 않아도 될꺼 같다..ㅋㅋ;

그럼 필드의 마지막이 생략된 경우는 어떨까??

source :
영어,한글,중국어,일어,독어
boy,소년,,ボ―イ,

output :
영어 -> boy
한글 -> 소년
중국어 -> ""
일어 -> ボ―イ
독어 -> null

output1.length = 5
output2.length = 4

안타깝게도 마지막 값이 생략된 경우는,
결과에 포함되지 않는 것을 알 수 있다..

JDK Document에서 String.split() method를 보면,
다음 두가지가 있음을 알 수 있다.

public String[] split(String regex)
public String[] split(String regex, int limit)

limit 값을 넘겨줄 수 있는 method를 사용해 보자.

String str = "boy,소년,,ボ―イ,";
String[] output = str.split(",", 5);

output :
영어 -> boy
한글 -> 소년
중국어 -> ""
일어 -> ボ―イ
독어 -> ""l

output.length = 5

정확히 필드의 값들이 매치되는 것을 볼 수 있다.

limit값은  split()의 결과로 받게 되는
String[]의 크기를 나타내는 값이다.


결론 :

다수의 정형화된 문자열을 분리하는데는 StringTokenizer가 편리하지만
정형화 되지 않은 문자열을 분리하는 경우는 String.split()가 더 편리할 수 있다.
(노가다로 해줘야 하는 작업이 줄어든다..ㅋ;)

물론,
필드의 갯수가 엉망인 문자열을 분리하는데는 String.split()로도 부족하다..
락군
*1  *2