자바 Substring을 이용한 문자열 자르기가 제대로 작동하지 않는 문제

조회수 1067회
package assignment2;
import java.util.Scanner;
import java.util.Arrays;

public class assign3 {
    public static void main(String[] args) {
        int n;
        int m;

        Scanner scan = new Scanner(System.in);
        System.out.println("Write 2 numbers below: ");
        n = scan.nextInt();
        m = scan.nextInt();

        int numArr[] = new int[n*m];
        for (int i=0; i<numArr.length; i++) {
            numArr[i] = i+1;
        }

        String str = Arrays.toString(numArr);
        System.out.println(str);
        System.out.println(str.substring(3,6));
        System.out.println(str.substring(0,m));
        System.out.println(str.substring(5));


        /*
        for (int i=1; i<=n; i++) {
            for (int j=1; j<=m; j++) {
                System.out.println(i + j + "\t");

            }

        }
        */
    }

}

이런 코드를 작성해서 결과를 출력해보면

[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] 2, [1, , 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]

이런 결과들이 나옵니다. 제가 찾아본 바로는 str.substring(3,6) 이 코드 같은 경우에는 네번째부터 일곱번째까지를 딱 잘라야 하고, str.substring(0,m) 이 드는 첫번째부터 m+1 번째까지 잘라야 한다고 생각이 되는데요, 어떤 부분이 왜 문제가 되는지 알려주시면 정말 감사하겠습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • String.substring(int, int)자바독을 보면:

    Parameters:
        beginIndex - the beginning index, inclusive.
        endIndex - the ending index, exclusive.
    

    라고 되어 있습니다. 시작 인덱스는 포함하지만, 종료 인덱스는 포함하지 않는다고 합니다.

    몇 가지 예를 들면:

    String str = "a234567890b234567890c234567890d234";
    Assert.assertEquals("a", str.substring(0, 1));        
    Assert.assertEquals("a23456", str.substring(0, 6));
    Assert.assertEquals("567", str.substring(4, 7));
    

    이렇게 됩니다. 여기서 인덱스 0~6의 결과를 봅시다. 인덱스 0은 a인데 포함했고 인덱스 6은 7인데 포함하지 않았습니다. 즉, substring(x, y)x이상 y미만 이란 뜻입니다.


    질문 내용으로 예를 들자면:

    int numArr[] = new int[5];
    for (int i = 0; i < numArr.length; i++) {
        numArr[i] = i + 1;
    }
    
    String str = Arrays.toString(numArr);
    System.out.println(str); // [1, 2, 3, 4, 5]
    

    여기서 str의 값인 문자열 [1, 2, 3, 4, 5]에 인덱스를 부여하면 요렇습니다:

    • 0: [
    • 1: 1
    • 2: ,
    • 3: (공백)
    • 4: 2
    • 5: ,
    • 6: (공백)

    여기까지 이해했다면 다음은 쉽겠죠?

    System.out.println(str.substring(3, 6)); //  2,
    System.out.println(str.substring(0, 4)); // [1, 
    
    • 3이상 6미만 = (공백)2,
    • 0이상 4미만 = [1,(공백)

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)