자바 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,(공백)
- 0:
댓글 입력