• 안드로이드 스튜디오 랜덤 문자 생성 및 TextView 출력하기

    2021. 1. 2.

    by. 하루플스토리

    반응형

    안녕하세요, 하루플스토리 입니다.

     

    앞으로 이 게시판은 혼자 안드로이드 스튜디오 공부하면서 사용할 공간입니다.

    혼자 공부하면서 다른분들도 함께 볼 수 있도록 공유하려 합니다.

    소스코드는 복사 붙이기 가능하도록 공유할테니 사용하시고 모르는 부분은 댓글에 질문 남겨주세요

    아는 부분은 답변해드리겠습니다!

     


    안드로이드 스튜디오 '메이플 닉네임 생성기' 앱 개발중 랜덤문자 생성 및 TextView 출력

    먼저 글자를 랜덤으로 생성하는 방법은 여러가지가 있으나 저는 두가지 방법을 올려보겠습니다.

     

    1. 아스키코드로 한글 문자 랜덤 생성하기.

    일단 랜덤을 사용하므로

    import java.util.Random;

    import 해줍니다.

    //랜덤생성 가즈아아
            Random rnd = new Random();
            final String random_name_1 = String.valueOf((char) ((int) (rnd.nextInt(11171))+44032)); //한글 랜덤 문자 1
            final String random_name_2 = String.valueOf((char) ((int) (rnd.nextInt(11171))+44032)); //한글 랜덤 문자 2
            final String random_name_3 = String.valueOf((char) ((int) (rnd.nextInt(11171))+44032)); //한글 랜덤 문자 3
            final String random_name_4 = String.valueOf((char) ((int) (rnd.nextInt(11171))+44032)); //한글 랜덤 문자 4
            final String random_name_5 = String.valueOf((char) ((int) (rnd.nextInt(11171))+44032)); //한글 랜덤 문자 5
            final String random_name_6 = String.valueOf((char) ((int) (rnd.nextInt(11171))+44032)); //한글 랜덤 문자 6

    메이플스토리 닉네임이 최대 6글자 이므로 random_name 변수를 6개 선언해주었습니다. 잠시뒤에 TextView에 출력할 때 이 문자들을 묶어주어야겠죠?

     

    아스키코드에서 한글이 44032번째 부터 시작하고 아스키코드의 한글 갯수가 11171개 입니다.

     

    //닉네임 생성하기 버튼
            final Button make_name = (Button) findViewById(R.id.make_name);
            make_name.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View view){
                    Toast.makeText(getApplicationContext(),"닉네임 랜덤 생성", Toast.LENGTH_LONG).show();
    
    
                    TextView text_make_name = (TextView)findViewById(R.id.text_make_name);
                    text_make_name.setText(String.valueOf(random_name_1+random_name_2+random_name_3+random_name_4+random_name_5+random_name_6));
                }
            });

    닉네임 생성하기 버튼은 TextView로 레이아웃 id는 'makename' 입니다.

    총 6글자를 합치려고 하니 '+' 로 random_name 을 위 소스코드 처럼 합쳐주면 되겠죠.

     

     

     

    2. 아스키 코드로 영어 대, 소문자 랜덤 생성하기

    만약 영어 대, 소문자를 랜덤변수로 문자로 가져오고 싶다면

    Random rnd = new Random();
            final String random_name_1 = String.valueOf((char) ((int) (rnd.nextInt(26))+97)); //영어 소문자 a-z
            final String random_name_2 = String.valueOf((char) ((int) (rnd.nextInt(26))+65)); //영어 대문자 A-Z

    알파벳 갯수가 26개이고 아스키코드 시작 부분을 지정해주면 됩니다.

     

     

    알파벳은 사실 별 이상이 없는데 한글은 아스키코드표에 이상한 문자가 너무 많습니다.

    사실상 사용하지 않는 '꽗뚫껡' 뭐.. 이런 문자들이 전부 포함되어 있어서 사용자들이 '이거뭐야....' 생각할 수 있겠죠.

    약간의 노가다가 필요하지만 배열처럼 생성해서 사용하려 합니다.

     

     

    3. 문자열에서 문자 랜덤으로 하나 출력하기

    //문자열에서 하나를 랜덤으로 출력
            Random rand = new Random();
            final String hangul = "가나다";
            final char rand_text = hangul.charAt(rand.nextInt(hangul.length()));
    
    
            //닉네임 생성하기 버튼
            final Button make_name = (Button) findViewById(R.id.make_name);
            make_name.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View view){
                    Toast.makeText(getApplicationContext(),"닉네임 랜덤 생성", Toast.LENGTH_LONG).show();
    
    
                    TextView text_make_name = (TextView)findViewById(R.id.text_make_name);
                    text_make_name.setText(String.valueOf(rand_text));
                }
            });

     

    charAt는 index로 주어진 값에 해당하는 문자를 리턴한다고 합니다.

    TextView에 표시할 setText에는 rand_text 변수를 써주면 됩니다.

     

    일단 문자열에 "가나다" 만 적었으니 이 중 하나가 랜덤으로 출력되어야겠죠?

    랜덤으로 잘 출력되는 것을 확인하였습니다.

     

     

     

    반응형

    댓글