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