개발자/JAVA

[JAVA 11일차]회원가입 메소드화/공백 제거/toCharArray/특정문자열제거해서 뽑아내기/세자리 마다 ,(콤마) 찍어주기

GoGo개발 2022. 8. 18. 19:53
문자열 중에 공백 제거

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// === 문자열 중에 공백을 제거하기 === //
        String str1 = "안녕하세요?";
        String str2 = "  저의 이름은 이순신 입니다.  ";
        String str3 = "끝입니다.";
        
        System.out.println(str1+str2+str3);
        // 안녕하세요? 저의 이름은 이순신 입니다. 끝입니다.
        
        String result = "";
        for(int i=0; i<str2.length(); i++) {
            char ch = str2.charAt(i);
            if(ch != ' ') {
                result += ch;
            }
        }
        
        System.out.println(str1+result+str3);
        
        // 안녕하세요?저의이름은이순신입니다.끝입니다
cs

 

toCharArray

 

 자바 toCharArray() 메소드는 문자열을 char형 배열로 바꿔준다. 반환되는 배열의 길이는 문자열의 길이와 같다.
 <주의 >문자열의 공백 또한 인덱스에 포함한다.

 

<공백 포함해서 변환하기>

블로그 참조 

https://keykat7.blogspot.com/2021/03/java-tochararray-char.html

 

[JAVA] toChararray() 메서드로 문자열을 char 배열에 저장하기

알고리즘, 코딩 테스트, C++, java, 파이썬, AI, 백준, 기업 코딩 테스트, 자료구조, 프로젝트, codeforces, unity, android

keykat7.blogspot.com

 

<공백 제거하고 변환하기>

 

1단계 :공백이 아닌  배열값의 수를 알아온다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 안녕하세요?저의이름은이순신입니다.끝입니다
        
        System.out.println("\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
        
        char[] ch_arr = str2.toCharArray();
        // str2 ==> " 저의 이름은 이순신 입니다. " 문자열은 tocharaarray char타입의 배열로 바꾸어줌?
    
        /*
                          -------------------------------------------------------------------------------
          ch_arr ==>     |' '|' '|'저'|'의'|' '|'이'|'름'|'은'|' '|'이'|'순'|'신'|' '|'입'|'니'|'다'|'.'|' '|' '|  
                          -------------------------------------------------------------------------------
         */
        
        int len = 0;
        for (char chr : ch_arr) { //ch_arr 배열중 chr 한글자 읽어옴
            if(chr != ' ') { //공백이 아닌 글자수 
                len++;
                
            }
        }//end of for---------------------
        
        //len ==> 12
 
        char[] ch_arr_result = new char[len];
        
cs

 

char[] ch_arr_result = new char[len];  : [12]인 배열을 하나 만들었다

 

 

2.단계 :  새로만든 배열에 공백이 아닌 글자들을 넣어준다.

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
                               --------------------------------------------------
          ch_arr_result ==>  |' '|' '|' '|' '|' '|' '|' '|' '|' '|' '|' '|' '|  
                              --------------------------------------------------
          
         */
        for(int i=0, j=0; i<ch_arr.length; i++, j++ ) {// ch_arr.length; 은 19이다.
            
            if(ch_arr[i] != ' ') {
                ch_arr_result[j] = ch_arr[i]; // ch_arr_result[0] = '저'
                                              // ch_arr_result[1] = '의'
                                              // ch_arr_result[2] = '저'
            }
            else { // 공백이라면  ,j는 머물러있는다 ++ -- 니까 조건에안맞으면 머물러있음
                j--//  -1 
            }
        
        
        
        }// end of for-------------
        
        System.out.println(str1 + String.valueOf(ch_arr_result) + str3);
cs

 

12개 짜리 배열인 ch_arr_result에 ch_arr배열중 공백이 아닌 글자만 넣어주는 작업

 

>>> 나중에 정규표현식으로 대체해서 사용하는 것 같다.

 

특정 문자열 제거해서 뽑아내기

 

1. ( ,) 콤마제거하기

 

1
2
3
4
5
6
7
8
9
10
11
12
String money1 = "1,234,567";
        String money2 = "50,000";
        
        String temp = "";
        for (int i =0; i<money1.length(); i++) {
            char ch = money1.charAt(i);
            if(ch != ',') {
                temp += ch;
            }
        }// end of for-------------------------
        
       int sum = Integer.parseInt(temp); // 1234567
cs

 

 

 

2.세자리마다 콤마 넣어주기

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// === 숫자 세자리마다 콤마 넣어주기 === //
        
        int money3 = 1500000;
        int money4 = 4000;
        
        temp = String.valueOf(money3+money4); // "1504000" //string 타입으로바꿔주기 , 찍어줘야 하니까
 
        System.out.println(temp);
        /* 
            "1504000"    글자수 7자리
            
            "1,504,000"
            
            글자수 1자리 ==> 콤마가 0개        글자수가 3의배수가 아니라면    1자리/3            =0
            글자수 2자리 ==> 콤마가 0개        글자수가 3의배수가 아니라면    2자리/3            =0
            글자수 3자리 ==> 콤마가 0개        글자수가 3의배수      이라면    3자리/3 -1 = 1-1  =0
            
            글자수 4자리 ==> 콤마가 1개        글자수가 3의배수가 아니라면    4자리/3            =1    
            글자수 5자리 ==> 콤마가 1개        글자수가 3의배수가 아니라면    5자리/3            =1
            글자수 6자리 ==> 콤마가 1개        글자수가 3의배수      이라면     6자리/3 -1 = 2 -1 =1
            
            글자수 7자리 ==> 콤마가 2개        글자수가 3의배수가 아니라면    7자리/3            =2
            글자수 8자리 ==> 콤마가 2개        글자수가 3의배수가 아니라면    8자리/3            =2
            글자수 9자리 ==> 콤마가 2개        글자수가 3의배수      이라면    9자리/3 -1 = 3-1  =2
            
            뒤에서 부터 순서가 4번째 ==> 콤마찍음
            뒤에서 부터 순서가 8번째 ==> 콤마찍음
          
         */
        
        char[] origin_arr = temp.toCharArray();
        
        /*
               "1504000"
             -----------------------------
             |'1'|'5'|'0'|'4'|'0'|'0'|'0'|
             -----------------------------
     index     0      1      2   3   4   5   6    
         */
        int origin_length = origin_arr.length// 7
        int comma_len = (origin_length%3==0)?origin_length/3-1:origin_length/3
        
        
        char[] result_arr = new char[origin_length + comma_len];
        
        /*
             -------------------------------------
              |' '|' '|' '|' '|' '|' '|' '|' '|' '|
              -------------------------------------
      index  0   1   2   3    4   5   6   7   8  
         */
        
        for(int i=origin_arr.length-1, j=result_arr.length-1, cnt=1; i>=0; i--, j--, cnt++) {
            if(cnt%4 !=0) {
            result_arr[j] = origin_arr[i];
            }
            
            else {
                result_arr[j] = ',';
                i++;  //j는9번 i는 7번반복인데 이래서 둘다 9번반복
                
            }
        }// end of for----------------------
        /*
            -------------------------------------
              |'1'|','|'5'|'0'|'4'|','|'0'|'0'|'0'|
              -------------------------------------
      index  0   1   2   3  4   5   6    7   8      
         */
        
        System.out.println(String.valueOf(result_arr));
cs

 

 

<더 쉬운 방법>

 

 

1
2
3
4
5
6
 
 
DecimalFormat df = new DecimalFormat("#,###"); // 3자리 마다 콤마를 찍어주는 것이다. decimalFormat 십진수
        System.out.println(df.format(38000000));
        System.out.println(df.format(MyUtil.delete_comma("3,000,000")+MyUtil.delete_comma("800,000")));
                
cs

 

 

<위의 방법들은 static 메소드로 다른 패키지에있는 클래스에 빼놓는다.>

(MyUtil 클래스에 append_comma와 delete_comma로)

 

파라미터의 형태와 메소드를 주의하여 공부해보자

 

<MyUtil 클래스에 delete_comma 메소드/ 파라미터는 String 타입으로 받는다 문자열로 받아서 정수로 리턴해줘야 하니까>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// === 콤마(,)가 들어있는 숫자로 되어진 문자열을 콤마(,)를 제거해서 정수로 리턴시켜주는 메소드 생성하기
    
    public static long delete_comma(String str) {
        //my.day11.b.array패키지 Main_comma_del_append_02 클래스 파일 참조할 것
        
        //str ==> "1,234,567" 또는 "하하하,호호호" 또는 "1,23t,567"
        
        String temp = "";  
        
        for (int i =0; i<str.length(); i++) {
            char ch = str.charAt(i);
            if(ch != ',') {
                temp += ch;
            }    
                
        }//end of for-------------
            try {
                long result = Long.parseLong(temp);// 리턴은 long타입으로 바꿔주기 Long.parseLong("1234567")
                                                   // Long.parseLong("하하하호호호") => 0 으로 나오게
                                                   // Long.parseLong("123t5667")
                return result;
            }catch(NumberFormatException e){
                return 0;
            }
 
cs

 

 

<MyUtil 클래스에 delete_comma 메소드/ 파라미터는 long 타입으로 받는다 정수로 받아서 문자열로 리턴해줘야 하니까>

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//=== 숫자에 3자리 마다 콤마(,)를 추가해서 문자열로 리턴시켜주는 메소드 생성하기 ===
    public static String append_comma(long num ) {
        // my.day11.b.array패키지 Main_comma_del_append_02 클래스 파일 참조할 것
        
        String temp = String.valueOf(num);
        
        char[] origin_arr = temp.toCharArray();
        
        int origin_length = origin_arr.length// 7
        int comma_len = (origin_length%3==0)?origin_length/3-1:origin_length/3
        
        char[] result_arr = new char[origin_length + comma_len];
        
        
        for(int i=origin_arr.length-1, j=result_arr.length-1, cnt=1; i>=0; i--, j--, cnt++) {
            if(cnt%4 !=0) {
            result_arr[j] = origin_arr[i];
            }
            
            else {
                result_arr[j] = ',';
                i++;  //j는9번 i는 7번반복인데 이래서 둘다 9번반복
            }    
        }
        
        
        return String.valueOf(result_arr);
    }
cs

 

사용할때는 아래와 같이 호출해보자

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
System.out.println(MyUtil.append_comma(25000000));
        //25,000,000
        
        System.out.println(MyUtil.append_comma(750000));
        //750,000
        
        // "3,000,000" + "800,000" == "3,8000,000"
        System.out.println(MyUtil.append_comma(MyUtil.delete_comma("3,000,000"+ MyUtil.delete_comma("800,000"))); 
        //delete comma 는 return long타입으로 , 빼고 나온다 / append comma는 , 찍고 나온다.
        
        System.out.println("\n=======================================\n");
        
        System.out.println(MyUtil.delete_comma("3,000,000"+ MyUtil.delete_comma("800,000")); 
        // 38000000
cs