본문 바로가기
Java 문제

[JAVA 문제풀이] 2차원 배열을 아래 샘플과 같이 열을 맞추어 출력 (5가지방법)

by 두리두리안 2021. 6. 8.

Object[][] records = new Object[][] {

        {"AAA", 1.23, 123456},

        {"BBBBB", 12.3, 123},

        {"CCCC", 123.4, 1234}

};

 

2차원 배열을 아래 샘플과 같이 열을 맞추어 출력하세요.

- 문자열을 왼쪽 맞춤, 숫자는 오른쪽 맞춤

- 단위기능을 적절히 메서드로 분리

 

 
| AAA   |  1.23 | 1234567 |
| BBBBB |  12.3 |    1234 |
| CCCC  | 123.4 |   12345 |

진행 순서

1. 먼저 2차원 배열을 출력

public class Test_0608 {
    public static void main(String[] args) {
        Object[][] records = new Object[][]{
                {"AAA", 1.23, 123456},
                {"BBBBB", 12.3, 123},
                {"CCCC", 123.4, 1234},
        };

        for (int i = 0; i < records.length; i++) {
            Object[] inArr = records[i];
            for (int j = 0; j < inArr.length; j++) {
                System.out.print(inArr[j] + " | ");
            }
            System.out.println();
        }
    }
}

 

 

2. matches를 사용해 정규식으로 구분 

문자열 체크 : ^[a-zA-Z]*$

소수점 숫자 체크 : [.0-9]+(.[0-9])

import java.util.regex.Pattern;

public class Test_0608 {
    public static void main(String[] args) {
        Object[][] records = new Object[][]{
                {"AAAA", 1.23, 123456},
                {"BBBB", 12.3, 123},
                {"CCCC", 123.4, 1234},
        };

        String pattern = "^[a-zA-Z]*$";
        String pattern2 = "[.0-9]+(.[0-9])";

        for (int i = 0; i < records.length; i++) {
            Object[] inArr = records[i];
            for (int j = 0; j < inArr.length; j++) {
                if(Pattern.matches(pattern, inArr[j].toString())){
                    System.out.print(inArr[j]+"   "+ "|");
                }
                if(Pattern.matches(pattern2, inArr[j].toString())){
                    System.out.print("    "+inArr[j] + "|");
                }
            }
            System.out.println();
        }
    }
}

 

import java.util.regex.Pattern;

public class Test_0608 {
    public static void main(String[] args) {
        Object[][] records = new Object[][]{
                {"AAAA", 1.23, 123456},
                {"BBBB", 12.3, 123},
                {"CCCC", 123.4, 1234},
        };

        String pattern = "^[a-zA-Z]*$";
//        String pattern2 = "[.0-9]+(.[0-9])";

        for (int i = 0; i < records.length; i++) {
            Object[] inArr = records[i];
            for (int j = 0; j < inArr.length; j++) {
                if (Pattern.matches(pattern, inArr[j].toString() )) {
                    //toString -  메서드는 객체가 가지고 있는 정보나 값들을 문자열로 만들어 리턴하는 메소드 입니다.
                    System.out.print(inArr[j] + "   " + "|");
                }
                else if(!Pattern.matches(pattern, inArr[j].toString() )){
                    System.out.print("    " +inArr[j] + "|");
                }
            }
            System.out.println();
        }
    }
}

 

3. method화 및 Java 문자열 포맷 사용 

package Test_0608;

public class Test_0608 {
    public static void main(String[] args) {
        Object[][] records = new Object[][]{
                {"AAA", 1.23, 123456},
                {"BBBBB", 12.3, 123},
                {"CCCC", 123.4, 1234},
        };
        //todo 1. 문자열의 길이 찾기
        //todo 2. 실수를 문자열로 바꾸기
        //todo 3. Integer 문자열로 바꾸기 
        //todo 4. 구한 길이의 최대 값을 또다른 배열로 생성 int maxlengh[5,5,6]; 이런씩
        //todo 5. 출력 - 열맞춤 왼쪽/오른쪽 - Java에도 C언어와 마찬가지로 format이 있다. format을 찾아보고 적용 -사장님이 알려주심-
        //todo 6. 끝나면 길이 구할때 사용한 for문은 따로 메소드 처리하기

        LengthCheck(records);
        System.out.println("******************************************************");
        returnSum(records);
    }
    public static void LengthCheck(Object[][] records){

        for (int i = 0; i < records.length; i++) {
            Object[] inArr = records[i];
            for (int j = 0; j < inArr.length; j++) {
                if (inArr[j] instanceof String) {
                    int length = ((String) inArr[j]).length();
                    System.out.print("길이 > " +length+" | ");
//                    System.out.print(inArr[j] + "|");
                }
                else if((inArr[j] instanceof Double)){
                    String test2 = String.valueOf(inArr[j].toString().length());
                    System.out.print("길이 > " +test2+" | ");
//                    System.out.print(inArr[j]+ "|");
                }
                else if((inArr[j] instanceof Integer)){
                    String test3 = String.valueOf(inArr[j].toString().length());
                    System.out.print("길이 > " +test3+" | ");
//                    System.out.print(inArr[j] + "|");
                }
            }
            System.out.println();
        }
    }

    public static void returnSum(Object[][] records) {

        for(int i=0; i<records.length; i++){
            Object[] inArr = records[i];
            for (int j = 0; j < inArr.length; j++) {
                if (inArr[j] instanceof String) {
                    System.out.format(String.format("%-6s",inArr[j] +" ")+"|");
                }
                else if((inArr[j] instanceof Double)){
                    System.out.format(String.format("%6s",inArr[j])+"|");
                }

                else if((inArr[j] instanceof Integer)){
                    System.out.format(String.format("%7s",inArr[j] )+"|");
                }
            }
            System.out.println();
        }
    }
}

 

 

4. 배열의 최대길이에 맞게 정렬하기

package Test_0608;

public class Object_test {
    public static void main(String[] args) {
        Object[][] records = new Object[][]{
                {"AAA", 1.23, 123456},
                {"BBBBB", 12.3, 123},
                {"CCCC", 123.4, 1234},
        };
        int num1 = 0;
        int num2 = 0;
        int num3 = 0;
        int numArr[] = new int[3];

        for(int i=0; i<3; i++){
            for(int j=0; j<3; j++){
                System.out.print(records[i][j] +" | ");
                if(num1 <records[i][0].toString().length()){
                    num1 = records[i][0].toString().length();
                }
                if(num2 <records[i][1].toString().length()){
                    num2 = records[i][1].toString().length();
                }
                if(num3 <records[i][2].toString().length()){
                    num3 = records[i][2].toString().length();
                }
                if(numArr[j] <records[i][j].toString().length()){
                    numArr[j] = records[i][j].toString().length();
                }
            }
            System.out.println();
        }
        System.out.println("-----------------------------------");

        for(int i=0; i<3; i++){
            for(int j=0; j<3; j++){
                String empty=" ";
                int maxArr = numArr[j]-records[i][j].toString().length();
                //공백의 길이
                for(int k=0; k<maxArr; k++){
                    empty += " ";
                }
                if(records[i][j] instanceof String){
                    System.out.print(records[i][j] + empty + " | ");
                }
                else{
                    System.out.print( empty +records[i][j] + " | ");
                }

            }
            System.out.println();
        }
        System.out.println("==================================");
        System.out.println(num1 + ":" +num2 +":"+num3);
        System.out.println("==================================");
        System.out.println(numArr[0] +":"+numArr[1]+":"+numArr[2]);
    }
}

 

5. 배열의 최대길이에 맞게 정렬및 가변적 정렬

package Test_0608;

public class Object_test {
    public static void main(String[] args) {
        Object[][] records = {
                {"AAA", 1.23, 123456},
                {"BBBBB", 12.3, 123},
                {"CCCC", 123.4, 1234},
                {"CCCC", 123.4, 1234},
                {"CCCC", 123.4, 5555555},
                {"CCCC", 123.4, 1234},
        };

        int[] numArr = new int[3];


        for (int i = 0; i< records.length ; i++) {
            // 가변적 길이 만큼이 아니라 각자 자기 행 길이 만큼 for문을 돌기
            for (int j = 0; j < records[0].length  ; j++) {
                //todo 3.  배열에서 가장 큰 수를 출력하는 파트 
                if (numArr[j] <= records[i][j].toString().length()) {
                    numArr[j] = records[i][j].toString().length();
                }
            }
        }
        System.out.println("-----------------------------------");

        for (int i = 0; i < records.length; i++) {
            for (int j = 0; j < records[0].length ; j++) {
                String empty = " ";
                //todo 4. 공백의 길이를 넣어주는 파트
                int maxArr = numArr[j] - records[i][j].toString().length();
                //공백의 길이
                for (int k = 0; k < maxArr; k++) {
                    empty += " ";
                }
                // todo 5.타입에 따라 문자열인 경우 왼쪽 정렬 | 아닌 경우 오른쪽 정렬
                if (records[i][j] instanceof String) {
                    System.out.print(records[i][j] + empty + " | ");
                } else {
                    System.out.print(empty + records[i][j] + " | ");
                }

            }
            System.out.println();
        }
    }
}