문자열의 줄 수를 구하는 코드

프로그래밍 2007.09.04 03:18
  제가 필요해서 만들어 본 짧막한 자바코드 입니다.

  지금 만들고 있는 게시판에 필요해서 짜 본 코드이거든요. 이 짧막한 코드가 하는 일은 아주 간단합니다. 파라메터로 문자열을 넣어주면 그 문자열이 몇 줄 짜리인지를 알아내서 int형으로 리턴해줍니다.


public class Utility{
    public static int getLineNum(String content){
        int linenum = 0;
        int point = 0;
        int endcheck = content.lastIndexOf ('\n');
        while(true){
            point = content.indexOf('\n', point);
            linenum++;
            if(endcheck == point++) break;
        }
        return linenum;
    }
}

  필요한 곳에서 Utility.getLineNum(str); 요론 식으로 사용하기 위해서 정적 메소드로 선언해 두었습니다. 객체를 생성해서 사용 할 필요까지는 없어서요. 필요한 것은 저 메소드 하나이기 때문에...

  코드는 매우 간단합니다.

  • endcheck변수에 문자열의 마지막 줄바꿈의 인덱스번호를 넣어둡니다.
  • 루프 속에서 point변수에 문자열의 앞 부분부터 줄바꿈의 위치를 찾아갑니다.
  • 줄바꿈을 한 개 찾을 때 마다 linenum변수에 찾은 개수를 늘려갑니다.
  • if문에선 지금 찾아낸 줄바꿈의 인덱스와 마지막 줄바꿈의 인덱스를 가지고 있는 endcheck와 비교를 합니다.
  • 지금 찾은 인덱스가 마지막 인덱스와 같다면 break;
  • 마지막으로 linenum을 리턴하게 되는데, linenum은 줄바꿈이 없을 때 1, 1번 줄 바꿈이 있을 때 2를.. 이런 방식으로 문자열의 줄 수를 리턴하게 됩니다.

  if문 안에서 point++을 하기 싫다면 다음 라인에 point를 증가시키는 코드를 추가 해 줘야 합니다.

  증가시켜 주지 않는다면 point는 계속 한 곳의 인덱스만을 가르키며 while문이 무한루프하게 됩니다. 또한 if문 안에서 ++point로 바꾸게 되면 endcheck와 같은 값이 나오지 않게되어 while문이 무한루프에 빠지게 됩니다.

  간단한 코드 이지만 이걸 만들면서 잠시동안 재미 있었어요^^S

Update 2007/9/4

public static int getLineNum(String content){
    int linenum = 0;
    for(int i = 0; i < content.length(); i++){
        if('\n' == content.charAt(i)) linenum++;
    }
    return linenum;
}


  sonegy님이 달아주신 댓글을 보고 메소드를 새로 만들었습니다. charAt()메소드를 사용하면 훨씬 간단하게 만들 수 있는데 먼 길로 돌아서 코드를 만들었네요...;;

  코드를 만들때 머릿속에 indexOf()가 먼저 떠올라서 다른 방법을 생각할 수 없게 되었었습니다...ㅠㅠ

  이게 코드도 짧고 훨씬 낫네요..ㅎㅎ

'프로그래밍' 카테고리의 다른 글

에어론체어 갖고싶다~~  (18) 2007.09.24
스트럿츠로 게시판 작업중  (0) 2007.09.18
문자열의 줄 수를 구하는 코드  (8) 2007.09.04
대단하다 스팸!!  (4) 2007.09.03
맥 OS X 오라클  (6) 2007.08.27
학교에서 배운 지식은 죽은 지식이다??  (4) 2007.08.20
top
  1. Favicon of http://sonegy.egloos.com sonegy 2007.09.04 10:47 신고 수정/삭제 댓글

    String 객체의 lastIndexOf 보단 charAt으로 char값을 비교해서 count하는게 더 보기 좋을듯하네요.
    음 근데 Utility 객체가 저러다 수퍼클래스가 되지 않을까 걱정입니다~~

    • Favicon of http://signpen.net 싸인펜 2007.09.04 15:19 신고 수정/삭제

      오오!! 감사합니다!!

      머리가 나빠서 charAt()를 사용하는 방법을 미처 생각하지 못했었네요.
      코드가 훨씬 간단하고 보기좋고 더불어 효율적으로 바뀌었습니다^^ㅋ

      그런데 Utility객체가 수퍼클래스가 된다는게 무슨 말씀인지 잘 모르겠습니다...;;;

  2. Favicon of http://www.myhyuny.net/ 화현 2007.09.05 01:32 신고 수정/삭제 댓글

    음, 조금 특이한 방법으로 만들어 봤어요
    public static int getLineNum(String content){
    int linenum = -1;
    for(int temp=1; temp > 0; linenum++){
    temp = content.indexOf("\n", temp) + 1;
    }
    return linenum;
    }
    하지만 속도와 효율성을 봐서는 싸인펜님이 2번째로 만든 코드가 더 낳아보이네요 ㅎㅎ

  3. Favicon of http://mewmew.tistory.com/ 야옹*^^* 2007.09.05 17:21 신고 수정/삭제 댓글

    오호.. 대단하신분들이세요. @.@

    • Favicon of http://signpen.net 싸인펜 2007.09.06 02:40 신고 수정/삭제

      야옹님, 칭찬 감사합니당~~

      대단하신 분들이라고 하시지 말고 저 대단하다고 해 주세요~~ 징징~~
      (칭찬에 목마른 1人, 이 댓글은.. 조크입니다)

  4. Favicon of http://luminance.kr/ 루미넌스 2007.09.14 17:56 신고 수정/삭제 댓글

    시스템에 따라서는 줄바꿈에 \n을 사용하지 않는 경우도 있습니다^^
    \n는 LineFeed문자이구요.. \r이라는 CarriageReturn 문자도 있죠.. 도스, 윈도우계열은 통상 \r\n을 줄 끝에 넣구요.. 유닉스 계열은 통상 \n을 넣습니다.
    하지만 정확히 기억안나는 모종의 시스템은 \r만을 씁니다. ^^

    • Favicon of http://signpen.net 싸인펜 2007.09.18 01:15 신고 수정/삭제

      예전에 소켓통신 관련 부분을 공부할 때 \r\n과 \n 등을 써먹었던게 기억이 납니다. \r만 사용하는 시스템도 있었군요^^ㅋ

      루미넌스님의 댓글엔 항상 정보가 담겨있는 것 같아요^^ㅋ

      지금 제가 사용하는 곳에는 \n이 제대로 작동이 되는데 나중에 필요로 할 때가 있을테니 다시한번 머릿속에 입력을 해 두어야 겠습니다^^

댓글 쓰기

캔맥주는 역시!!

공개일기 2007.05.08 23:48
만두와 맥주

  잠자기 전에 맥주 한캔!!(사진은 2일 전의 안주)
  어제는 떡갈비 안주와 맥주 한캔!!

  요즘들어 맥주 안주가 럭셔리하게 변하고 있습니다. '자취생에게 고기는 사치'라며 삶은계란으로 단백질을 섭취하던 모습은 온데간데 없고 럭셔리하게 맥주를 즐기고 있습니다.

  요즘 잠들기 전의 일과가
  1. 떡갈비 또는 만두를 굽는다.
  2. 샤워를 하러 들어간다.
  3. 샤워가 끝나면 냉장고에서 캔맥주 하나를 꺼낸다.
  4. 미리 만들어둔 안주들과 함께 맥주를 즐긴다.
이렇습니다.

  게다가 얼마전에 블로그를 통해서 자랑했던 냉장고의 캔맥주들이 모두 바닥나버려서 어제 새로 보충했습니다. 다시 냉장고에는 맥주캔이 가득합니다.

  나만 혼자 먹어야쥐~ 음훼훼~S

'공개일기' 카테고리의 다른 글

프리즌 브레이크  (2) 2007.05.16
정보처리기사 시험보러 갑니다^^ㅋ  (4) 2007.05.13
캔맥주는 역시!!  (8) 2007.05.08
단백질 보충!!  (12) 2007.05.04
꿈을 이루다!!  (16) 2007.04.27
낮잠을 너무 길게 자버렸어  (10) 2007.04.25
top
  1. Favicon of http://raintalk.com 비오네 2007.05.09 00:52 신고 수정/삭제 댓글

    럭셔리하군요.
    하루 일과를 끝내고 시원하게 샤워후에 맛있는 안주와 맥주 한캔...
    크아~ 살맛 나겠습니다. 아... 맥주 땡겨요...

  2. Favicon of http://laputian.net Laputian 2007.05.09 18:57 신고 수정/삭제 댓글

    .. 미성년자에게는 멀고먼 이야기.

    • Favicon of http://signpen.net 싸인펜 2007.05.09 20:43 신고 수정/삭제

      Laputian님, 미성년자이면 뭐 어떻습니까! 그냥 마시는겁니다~ㅋ
      맥주는 음료수에요. 음료수.


      블로그의 게시물과 댓글로인한 성적하락, 인성변화에대해 싸인펜은 어떠한 책임도 지지않음을 경고드립니다.
      싸인펜의 불건전 블로그.

  3. Favicon of http://raonsky.com/tt/ 라온수카이 2007.05.09 23:15 신고 수정/삭제 댓글

    누구한테 뽐뿌질을 받았는지 요즘 이틀에 한번씩 대낮에 캔맥주를 마시고 있습니다. 6이 이후의 음주는 9시에 있을 점호에 영향을 주기때문에 그 전에 해결하다보니 낮술이 되어버리는 거죠...;

    • Favicon of http://signpen.net 싸인펜 2007.05.10 19:45 신고 수정/삭제

      라온수카이님의 낮술 라이프.

      언제 한번 저희집에 놀러오시면 거하게 밤술들 대접해 드리겠습니다^^

  4. Favicon of http://1kko.com 이코 2007.05.10 02:26 신고 수정/삭제 댓글

    아랫배를 조심하세요~ :D
    (그래도 술 잘 못마시는 저로서는 왠지 부럽습니다)

    • Favicon of http://signpen.net 싸인펜 2007.05.10 19:45 신고 수정/삭제

      밤늦게 마시는 술이다보니 이코님의 말씀 항상기억하고 있겠습니다.

      안그래도 요즘 뱃살이 늘어나서 조금씩 운동도 시작했거든요^^

댓글 쓰기