1. 절차를 쪼개서 하나씩 풀기
String nums에 들어있는 데이터를 “,”를 기준으로 하여 splitNums[]배열에 하나씩 집어넣기
※ for 문을 사용하여 한 번에 집어 넣을 수 있지만 하나씩 확인해보기 (2가지 정도만 확인함)
package ex08;
public class Str02 {
public static void main(String[] args) {
String nums = """
031)533-2112,
02)223-2234,
02)293-4444,
051)398-3434,
02)498-3434,
051)398-3434,
043)3222-3434
""";
// 부산에 사는 고객은 몇명인가요?
// 1. split(,)로 String[] splitNums[]로 옮기기
String[] splitNums = nums.split(",");
System.out.println(splitNums[0]);
System.out.println(splitNums[1]);
System.out.println(splitNums[1].length());
System.out.println(splitNums.length);
}
}

031)533-2112 의 길이 12 = O
02)223-2234 의 길이 11 = X (길이가 1개가 추가가 되었다)
현재 splitNums의 배열의 크기 7 = O
※먼가 결과창의 띄워쓰기가 있다. 2번째 배열에 들어갈 떄에 \n(한줄 띄기)가 들어간 것 같으므로 split(,)를 split(,\n)으로 고쳐보기
2. 위 문제점 수정 후 실행
package ex08;
public class Str02 {
public static void main(String[] args) {
String nums = """
031)533-2112,
02)223-2234,
02)293-4444,
051)398-3434,
02)498-3434,
051)398-3434,
043)3222-3434
""";
// 부산에 사는 고객은 몇명인가요?
// 1. split(,)로 String[] splitNums[]로 옮기기
String[] splitNums = nums.split(",\n");
System.out.println(splitNums[0]);
System.out.println(splitNums[0].length());
System.out.println(splitNums[1]);
System.out.println(splitNums[1].length());
System.out.println(splitNums.length);
}
}

3. splitNums[] 배열의 “)” 번지수 찾고 “)” 앞에 지역번수 출력
package ex08;
public class Str02 {
public static void main(String[] args) {
String nums = """
031)533-2112,
02)223-2234,
02)293-4444,
051)398-3434,
02)498-3434,
051)398-3434,
043)3222-3434
""";
// 부산에 사는 고객은 몇명인가요?
// 1. split(,)로 String[] splitNums[]로 옮기기 - pasing
String[] splitNums = nums.split(",\n");
//2. indexOf 이용하여 ")"의 주소를 찾기
// substring을 이용하여 ")" 앞에 지역 번호를 추출하여 배열에 저장
System.out.println(splitNums[0].indexOf(")")); // 3번지에 ")" 가 있음
System.out.println(splitNums[1].indexOf(")")); // 2번지에 ")" 가 있음
System.out.println(splitNums[0].substring(0, splitNums[0].indexOf(")")));
System.out.println(splitNums[1].substring(0, splitNums[1].indexOf(")")));
//3. 지역번호가 "051"이면 count를 1 증가하여 부산 사람 = count 출력
}
}

4. 지역번수를 따로 저장하기
package ex08;
public class Str02 {
public static void main(String[] args) {
String nums = """
031)533-2112,
02)223-2234,
02)293-4444,
051)398-3434,
02)498-3434,
051)398-3434,
043)3222-3434
""";
// 부산에 사는 고객은 몇명인가요?
// 1. split(,)로 String[] splitNums[]로 옮기기 - pasing
String[] splitNums = nums.split(",\n");
//2. indexOf 이용하여 ")"의 주소를 찾기
// substring을 이용하여 ")" 앞에 지역 번호를 추출하여 배열에 저장
/*System.out.println(splitNums[0].indexOf(")")); // 3번지에 ")" 가 있음
System.out.println(splitNums[1].indexOf(")")); // 2번지에 ")" 가 있음
System.out.println(splitNums[0].substring(0, splitNums[0].indexOf(")")));
System.out.println(splitNums[1].substring(0, splitNums[1].indexOf(")")));*/
String newNums = splitNums[0].substring(0, splitNums[0].indexOf(")"));
String newNums1 = splitNums[1].substring(0, splitNums[1].indexOf(")"));
System.out.println(newNums);
System.out.println(newNums1);
//3. 지역번호가 "051"이면 count를 1 증가하여 부산 사람 = count 출력
}
}

5. 모든 배열을 확인하여 051인 지역번호가 있으면 count가 1 증가 하도록 만들기
package ex08;
import java.sql.SQLOutput;
public class Str02 {
public static void main(String[] args) {
String nums = """
031)533-2112,
02)223-2234,
02)293-4444,
051)398-3434,
02)498-3434,
051)398-3434,
043)3222-3434
""";
// 부산에 사는 고객은 몇명인가요?
// 1. split(,)로 String[] splitNums[]로 옮기기 - pasing
String[] splitNums = nums.split(",\n");
//2. indexOf 이용하여 ")"의 주소를 찾기
// substring을 이용하여 ")" 앞에 지역 번호를 추출하여 배열에 저장
/*System.out.println(splitNums[0].indexOf(")")); // 3번지에 ")" 가 있음
System.out.println(splitNums[1].indexOf(")")); // 2번지에 ")" 가 있음
System.out.println(splitNums[0].substring(0, splitNums[0].indexOf(")")));
System.out.println(splitNums[1].substring(0, splitNums[1].indexOf(")")));*/
String newNums = splitNums[0].substring(0, splitNums[0].indexOf(")"));
String newNums1 = splitNums[1].substring(0, splitNums[1].indexOf(")"));
String newNums2 = splitNums[2].substring(0, splitNums[2].indexOf(")"));
String newNums3 = splitNums[3].substring(0, splitNums[3].indexOf(")"));
String newNums4 = splitNums[4].substring(0, splitNums[4].indexOf(")"));
String newNums5 = splitNums[5].substring(0, splitNums[5].indexOf(")"));
String newNums6 = splitNums[6].substring(0, splitNums[6].indexOf(")"));
//3.contains를 이용해 지역번호가 "051"이면 count를 1 증가하여 부산 사람 = count 출력
int count = 0;
if (newNums.contains("051") == true) {
count++;
}
System.out.println(count);
if (newNums3.contains("051") == true) {
count++;
}
System.out.println(count);
}
}

조건문이 변수에 들어가 있는 수가 “051”과 같으면 count가 1 올라간다.
newNums = 031 이기 때문에 count가 0
newNums3 = 051이기 때문에 count가 1 증가한 결과이다.
6. newNum[]을 만들어 splitNums[]에 있는 배열을 하나 하나 옮기고 for문으로 공통모듈 감싸기
package ex08;
import java.sql.SQLOutput;
public class Str02 {
public static void main(String[] args) {
String nums = """
031)533-2112,
02)223-2234,
02)293-4444,
051)398-3434,
02)498-3434,
051)398-3434,
043)3222-3434
""";
// 부산에 사는 고객은 몇명인가요?
// 1. split(,)로 String[] splitNums[]로 옮기기 - pasing
String[] splitNums = nums.split(",\n");
//2. indexOf 이용하여 ")"의 주소를 찾기
// substring을 이용하여 ")" 앞에 지역 번호를 추출하여 배열에 저장
/*System.out.println(splitNums[0].indexOf(")")); // 3번지에 ")" 가 있음
System.out.println(splitNums[1].indexOf(")")); // 2번지에 ")" 가 있음
System.out.println(splitNums[0].substring(0, splitNums[0].indexOf(")")));
System.out.println(splitNums[1].substring(0, splitNums[1].indexOf(")")));*/
// newNums 배열을 만들어 splitNum의 배열을 newNums에 옮기기
String[] newNums = new String[7];
for (int i = 0; i < newNums.length; i++) {
newNums[i] = splitNums[i].substring(0, splitNums[i].indexOf(")"));
}
int count = 0;
//3.contains를 이용해 지역번호가 "051"이면 count를 1 증가하여 부산 사람 = count 출력
for (int i = 0; i < splitNums.length; i++) {
if (newNums[i].contains("051") == true) {
count++;
}
}
System.out.println("부산에 사는 사람은 " + count + "명 입니다");
}
}

코드 최적화 (실패 / 아래의 이유 확인)
newNums[]에 다시 옮기지 말고 splitNums를 그대로 사용해도 될 것 같음. 그래서 splitNums를 for문으로 돌렸다.
package ex08;
import java.sql.SQLOutput;
public class Str02 {
public static void main(String[] args) {
String nums = """
031)533-2112,
02)223-2234,
02)293-4444,
051)398-3434,
02)498-3434,
051)398-3434,
043)3222-3434
""";
// 부산에 사는 고객은 몇명인가요?
// 1. split(,)로 String[] splitNums[]로 옮기기 - pasing
String[] splitNums = nums.split(",\n");
//2. indexOf 이용하여 ")"의 주소를 찾기
// substring을 이용하여 ")" 앞에 지역 번호를 추출하여 배열에 저장
//3.contains를 이용해 지역번호가 "051"이면 count를 1 증가하여 부산 사람 = count 출력
int count = 0;
for (int i = 0; i < splitNums.length; i++) {
if (splitNums[i].contains("051") == true) {
count++;
}
}
System.out.println("부산에 사는 사람은 " + count + "명 입니다");
}
}

문제점 발견
043)3222-051 인 사람도 포함 시켜서 count수를 1 올림 (지역번호 외에도 051이 들어가면 count + 1 한다.)
- newNum에 옮기지 않고는 안되는 것 같다. 왜냐하면 splitNums에는 031)533-2112 전체가 들어가 있는 것이고 newNum은 “)” 앞에 있는 번호만 잘라서 newNum에 넣은 것 이기 때문이다. 따라서 splitNums를 사용하면 031)533-0512라는 번호도 051이 포함 되어 있기 때문에 count가 1 올라가서 올바르지 못한 코드이다.
Share article