예를들어 전화번호 010-1111-1234 또는 주민등록번호 931123-1023582 등
특정포멧을 가지고 있는 데이터를 가공할때 유용하게 사용 할 수 있다.
실제 프로젝트에서는 다양한 형태의 문자열 데이터를 가공하는 일이
많기때문에 정확한 사용법을 알고있어야 한다.
사용시 주의사항 딱 한가지만 기억하면 된다.
⭕️ split()의기본사용법
class SplitDemo {
public static void main(String[] args) {
String str_sample = "010-1111-1234";
String[] arrSample = str_sample.split("-");
int index = 0;
for(String item : arrSample)
{
System.out.println("item[" + index + "]" + "=" + item);
index++;
}
}
}
[코드설명]
str_sample.split() 의 파라미터로 넘긴 "-" (대쉬기호)를 기준으로
문자열을 분리하여 각각을 배열에 순서대로 담는다.
[실행결과]
item[0]=010 item[1]=1111 item[2]=1234
⭕️ split()의주의사항
[코드설명]
split()함수의 인자(파라미터)는, 문자(char)가 아니다.
정규표현식(regex)을 파라미터로 넣어야한다.
예를들어 "." (마침표) 를 split()의 파라미터로 넣고
문자열을 배열로 변환하는 코드를 작성해보았다.
class SplitDemo {
public static void main(String[] args) {
String strSample = "2022.09.28";
String[] arrSample = strSample.split(".");
int index = 0;
for(String item : arrSample)
{
System.out.println("item[" + index + "]" + "=" + item);
index++;
}
System.out.println("arrSample.length = " + arrSample.length);
System.out.println("arrSample[0] = " + arrSample[0]);
}
}
[코드설명]
for문의 System.out.println()이 실행되지않기때문에,
그 바로 아래에 System.out.println()문을 2개 추가하였다.
[실행결과]
arrSample.length = 0 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 at SplitDemo.main(Main.java:22)
[추가설명]
split()의 파라미터로 "."(마침표)를 넣어서 문자열이 3덩어리로
잘라져 배열에 순서대로 담기길 원했지만,
예상대로 작동하지않는것을 확인 할 수 있다.
그 이유는,
정규표현식에서 "." (마침표) 는 와일드카드로 모든문자를 의미하며
우리눈에 보이는 "."마침표를 "." 마침표 그대로 인식하지 않는다.
자바 split() 함수에서 마침표를 사용하기위해선
마침표를 대괄호로 감싸서 정규표현식으로 바꿔 넣어주어야한다.
"[.]" 로 사용해야한다.
"//." 이것은 동작하지않는다.
class SplitDemo {
public static void main(String[] args) {
String strSample = "2022.09.28";
String[] arrSample = strSample.split("[.]");
int index = 0;
for(String item : arrSample)
{
System.out.println("item[" + index + "]" + "=" + item);
index++;
}
System.out.println("arrSample.length = " + arrSample.length);
System.out.println("arrSample[0] = " + arrSample[0]);
}
}
보통 자바 for문에서 break를 사용하는 일은 거의 없지만, 불필요한 Loop 실행을 방지하고자할땐 꼭 사용해야한다.
⭕️ for문에서 break의기본사용법
// 라벨링 하지않은 for문
public class Main {
public static void main(String[] args) {
for (int k = 0; k < 10; k++)
{
System.out.println("K FOR Loop k = " + k);
if(k == 3)
{
break;
}
}
System.out.println("all FOR Loop escape");
}
}
[코드설명]
for문은 0~9까지 10번 반복되어 실행되어야 하지만,
0,1,2,3 까지 4회 반복 된 후 중간에 if( k == 3)을 만나 break 가 걸려
반복문을 중단하고 빠져나오게 된다.
[실행결과]
K FOR Loop k = 0 K FOR Loop k = 1 K FOR Loop k = 2 K FOR Loop k = 3 all FOR Loop escape
⭕️ for문에서 break의응용사용법1
// 라벨링처리한 for문
public class Main {
public static void main(String[] args) {
subLoop:
for(int j = 0; j < 5; j++)
{
lastLoop:
for (int k = 0; k < 10; k++)
{
System.out.println("K FOR Loop k = " + k);
if(k == 3)
{
break lastLoop;
}
}
System.out.println("j FOR Loop j = " + j);
}
System.out.println("all FOR Loop escape");
}
}
[코드설명]
-중첩된(겹쳐있는) for Loop를 사용하는경우, break를 함께 사용해야 할 경우
각 for Loop에 라벨(label) 이라는 것을 붙혀, 각 for Loop를 구별 할 수 있다.
(예시에선 - subLoop:와 lastLoop:로 사용하였다. )
(라벨이름은 자유롭게 사용 할 수 있지만, for문의 목적을 한번에
알아챌 수 있도록 작성하는게 좋으며, 라벨이름 뒤에 콜론(":")을 붙혀 사용한다.)
[실행결과]
K FOR Loop k = 0 K FOR Loop k = 1 K FOR Loop k = 2 K FOR Loop k = 3 j FOR Loop j = 0 K FOR Loop k = 0 K FOR Loop k = 1 K FOR Loop k = 2 K FOR Loop k = 3 j FOR Loop j = 1 K FOR Loop k = 0 K FOR Loop k = 1 K FOR Loop k = 2 K FOR Loop k = 3 j FOR Loop j = 2 K FOR Loop k = 0 K FOR Loop k = 1 K FOR Loop k = 2 K FOR Loop k = 3 j FOR Loop j = 3 K FOR Loop k = 0 K FOR Loop k = 1 K FOR Loop k = 2 K FOR Loop k = 3 j FOR Loop j = 4 all FOR Loop escape
⭕️ for문에서 break의응용사용법2
public class Main {
public static void main(String[] args) {
subLoop:
for(int j = 0; j < 5; j++)
{
lastLoop:
for (int k = 0; k < 10; k++)
{
System.out.println("K FOR Loop k = " + k);
if(k == 3)
{
break subLoop;
}
}
System.out.println("j FOR Loop j = " + j);
}
System.out.println("all FOR Loop escape");
}
}
[코드설명]
lastLoop: 에서 break가 없다면 k가 0~9 까지 반복되어야 하지만,
k가 3이되었을때, lastLoop: 가 아니라, 부모인 subLoop: 를 break시켜버리면서( j = 0 )
그 즉시, 전체 for Loop가 종료되었다.
for Loop의 라벨(label)은 break 명령어와 함께 사용하여 for Loop를 자유롭게 종료 시킬 수 있다.
[실행결과]
K FOR Loop k = 0 K FOR Loop k = 1 K FOR Loop k = 2 K FOR Loop k = 3 all FOR Loop escape
⭕️ for문에서 break의고급예제1
class BreakWithLabelDemo {
public static void main(String[] args) {
int[][] arrayOfInts = {
{ 32, 87, 3, 589 },
{ 12, 1076, 2000, 8 },
{ 622, 127, 77, 955 }
};
int searchfor = 12;
int i;
int j = 0;
boolean foundIt = false;
search:
for (i = 0; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length;
j++) {
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
break search;
}
}
}
if (foundIt) {
System.out.println("Found " + searchfor + " at " + i + ", " + j);
} else {
System.out.println(searchfor + " not in the array");
}
}
}