안녕하세요. 제임스 입니다. 


이번 포스팅 부터는 정규식에 대해 정리 하고자 합니다.


정규표현식(Regular Expression)은 특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용하는 형식 언어 입니다. Pattern Matching 이라고도 부릅니다.


이 정규식을 사용하는 방법에 대해 알아보겠습니다. 


표현식 상세
^ 문자열의 시작을 의미
$ 문자열의 종료를 의미
. 줄바꿈을 제외한 임의의 문자를 의미. 줄바꿈을 위한 m 옵션은 허용
[...] [] 사이에 있는 임의의 문자 또는 문자집합. 문자의 집합은 시작 문자와 종료 문자 사이에 - 기호로 범위를 지정
[^...] [] 사이에 있는 임의의 문자 또는 문자집합을 제외
{} 회수 또는 범위를 의미
() 소괄호 안의 문자를 하나의 문자로 인식
\A 전체 문자의 시작
\z 전체 문자의 종료
\Z 허용되는 최종 라인 종결자를 제외한 전체 문자열의
re* 앞의 표현식이 0 이상 일치
re+ 앞의 표현식이 1 이상 일치
re? 앞의 표현식이 0 또는 1 일치
re{ n} 앞의 표현식이 정확히 n 일치
re{ n,} 앞의 표현식이 n 또는 이상 일치
re{ n, m} 앞의 표현식이 최소 n 최대 m 일치 
a| b a 또는 b 일치
(?i) (?i) 뒤에 옵션을 추가 대소문자 구분하지 않음
(re) 정규식을 그룹화하고 일치된 텍스트를 기억
(?: re) 정규식을 그룹화하고 일치하지 않는 텍스트를 기억
(?> re) 역추적 없이 독립적 패턴과 일치
\w 단어 문자와 일치
\W 단어 문자와 일치
\s 공백문자와 일치. [\t \n \r \f] 동일
\S 공백문자와 일치
\d 숫자와 일치. [0-9] 동일
\D 숫자가 아닌 모든 문자와 일치
\A 문자열의 시작과 일치
\Z 문자열의 종료와 일치. 만약 줄바꿈이 있다면 줄바꿈 이전 문자열과 일치
\z 문자열의 종료와 일치
\G 마지막 일치 위치가 끝난 지점과 일치
\n 캡처 그룹 번호 n 대한 참조
\b 대괄호 밖에 있을때 단어 경계와 일치. 대괄호 안에 있을때는 백스페이스 (0x08) 일치
\B 단어 경계와 일치
\n 줄바꿈과 일치
\t 탭과 일치
\Q, \E \Q \E 사이의 문자와 일치


정규표현식의 기본 패턴 들입니다. 

위 값들의 조합을 통해 원하는 표현식을 만들 수 있습니다. 




정규표현식은 아래와 같이 String 함수들과 함께 사용할 수 있습니다. 


s.matches("regular expression") 

s.split("regular expression")

s.replaceAll("regular expression")


이외에도 다른 String 함수들과 함께 사용 할 수 있습니다. 


1
2
3
4
5
6
7
8
String regExp = "^[a-zA-Z]*$";
        
String testStr1 = "TestCodeHere";
if(testStr1.matches(regExp)){
    System.out.println("testStr1 은 정규표현식에 맞는 문자열");
}else {
    System.out.println("testStr1 은 정규표현식에 맞지 않는 문자열");
}
cs


regExp 라는 변수에 "^[a-zA-Z]*&" 라는 표현식을 작성 했습니다. 

이 표현식은 우리가 일상 코딩중 가장 많이 사용하는 표현식으로 영문대소문자만 허용한다는 표현식입니다. 


String 함수중 matches 함수를 이용하여 testStr1 값이 regExp 표현식에 맞는지 비교 하는 코드 입니다. 

testStr1 값중 영문 대소문자 외에 어떤 텍스트도 보이지 않습니다. 결과 값은 예상 가능하죠? ^^


testStr1 은 정규표현식에 맞는 문자열




1
2
3
4
5
6
String testStr2 = "TestCodeHere.";
if(testStr2.matches(regExp)){
    System.out.println("testStr2 은 정규표현식에 맞는 문자열");
}else {
    System.out.println("testStr2 은 정규표현식에 맞지 않는 문자열");
}
cs


이번에는 동일한 표현식에 testStr2 값이 부합하는지 확인 해보겠습니다. 

testStr2 는 testStr1 값에 마침표( . )을 하나 추가 했습니다. 

정규 표현식 상에서는 영문대소문자만 허용하는 것으로 작성 했습니다. 

결과는 당연히 표현식에 맞지 않는 문자열이라는 값을 리턴해야 정상입니다. 


testStr2 은 정규표현식에 맞지 않는 문자열



1
2
3
4
5
6
String testStr3 = "Im James";
if(testStr3.matches(regExp)){
    System.out.println("testStr3 은 정규표현식에 맞는 문자열");
}else {
    System.out.println("testStr3 은 정규표현식에 맞지 않는 문자열");
}
cs


이번에는 문자열에 스페이스가 있습니다. 

두번째 예제를 이해 하셨다면 쉽겠죠? 당연히 정규표현식에 맞지 않는 문자열입니다. 


testStr3 은 정규표현식에 맞지 않는 문자열



이번 포스팅에서는 정규표현식의 기본을 간단히 정리 했습니다. 

앞으로 많이 사용하는 패턴들과 특수한 케이스에 대해 정리해 보겠습니다. 



아래 링크는 정규표현식을 테스트 해볼 수 있는 사이트 입니다. 

잘 이용하시길 바랍니다.


https://regexr.com/



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D




블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



 ■ Java Character - Character.toUpperCase() 함수



toUpperCase() 함수는 입력받은 인자 값을 영문 대문자로 변환하여 리턴합니다. 



Syntax

public static char toUpperCase ( char ch )

public static int toUpperCase ( int codePoint )



Example


1
2
System.out.println(Character.toUpperCase('t'));
System.out.println(Character.toUpperCase('\u0074'));
cs


소문자 't' 와 유니코드 값을 이용하여 대문자로 변환 하면 대문자 'T' 가 리턴됩니다. 



1
System.out.println(Character.toUpperCase('T'));
cs


인자 값이 대문자 일 경우 별도 변경 사항 없이 그대로 대문자 'T' 가 리턴 됩니다. 



1
System.out.println(Character.toUpperCase(116));
cs


인자 값이 int 형인 경우도 동일합니다. 

116 은 소문자 't' 를 의미 합니다. 대문자로 변경을 할 경우 대문자 'T' 가 리턴 되는 것이 아니라 대문자 'T' 에 상응하는 Unicode 숫자 값이 리턴 됩니다. 


실행 결과 84 가 리턴됩니다. 




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D




블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



■ Java Character - Character.isDigit() 함수



isDigit() 함수는 명시된 char 값이 숫자 인지 여부를 판단하여 true 또는 false 값으로 리턴 합니다. 앞서 포스팅한 siLetter() 함수와 반대 기능을 한다고 생각 하시면 됩니다. 



Syntax

public static boolean isDigit ( char ch )

public static boolean isDigit ( int codePoint )



Example

1
System.out.println(Character.isDigit('a'));
cs


입력 값 'a' 가 숫자 인지 여부를 판단하는 코드 입니다. 

당연히 아니죠 ^^


실행 결과 false 가 리턴 됩니다. 



1
System.out.println(Character.isDigit('97'));
cs


입력 값 '97' 이 숫자 인지 여부를 판단하는 코드 입니다. 


실행 결과 true 가 리턴 됩니다. 



1
System.out.println(Character.isDigit(97));
cs


앞선 예제와 달리 char 형'97' 값이 아닌 int 형 97 을 입력 했습니다. 

얼핏 보기에는 97 은 숫자 이니 ture 가 리턴 될 것이라 생각 할 수 있습니다. 


Syntax 에 보시면 두번째 함수의 인자 값이 int codePoint 라고 되어 있습니다. 

이 codePoint 는 Unicode 값으로 소문자 a 를 의미 합니다.

a 는 문자죠? ^^


실행 결과는 예상과 달리 false 가 리턴됩니다. 



Unicode 표는 아래 링크를 참조 하세요

https://en.wikipedia.org/wiki/List_of_Unicode_characters




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



 ■ Java Numbers - ceil() 함수


ceil() 함수는 입력 인자 값보다 크거나 같은 가장 작은 정수 값을 double 형으로 반환 합니다. 



Syntax

static double ceil(double d)

static double ceil(float f)



Sample

1
2
3
4
5
6
7
8
double d1 = -10.675;
System.out.println(Math.ceil(d1));
        
double d2 = -9.675;
System.out.println(Math.ceil(d2));
        
double d3 = 10.675;
System.out.println(Math.ceil(d3));
cs


d1 = -10.675 입니다.

-10.675 보다 크거나 같은 정수 값이 뭘까요? -10 입니다. 

-10을 double 형으로 변환하면 -10.0 으로 표현 할 수 있습니다. 


d2 = -9.675 입니다. 

-9.675 보다 크거나 같은 정수 값은 -9 입니다. 

-9 를 double  형으로 변환하면 -9.0 으로 표현 할 수 있습니다. 


d3 = 10.675 입니다. 

10.675 보다 크거나 같은 정수 값은 11이죠 ^^

이를 역시 double  형으로 변환하면 11.0 입니다. 



위 코드를 실행 한 결과 값은 아래와 같습니다. 


-10.0

-9.0

11.0



입력받은 double 또는 float 값보다 크거나 같은 정수값을 다시 double 형으로 반환 하는 ceil() 함수...

잘 이용하시길 바랍니다 ^^



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


문자열을 숫자로 변환시키는 방법으로 자바에서는 Integer.parseInt 를 사용합니다. 


parseInt 함수는 Integer 클래스의 static 함수입니다. 


형태는 아래와 같이 두가지가 있습니다. 



Integer.parseInt(String s)

숫자형의 문자열을 인자 값으로 받으면 해당 값을 10진수의 Integer 형으로 반환 해줍니다. 

1
Integer.parseInt("1004")
cs


참고: https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String)



Integer.parseInt(String s, int radix)

숫자형의 문자열을 첫번째 인자 값으로 받고 변환할 진수값을 입력하면 해당 진수에 맞춰 Integer 형으로 반환하여 줍니다. 

1
2
3
Integer.parseInt("2018"8);
Integer.parseInt("1004"10);
Integer.parseInt("1004"16);
cs


참고: https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String,%20int)



Integer.parseInt("1004", 10) 의 결과 값은 Integer.parseInt("1004") 한 값과 동일 합니다. 

그래서 첫번째 Integer.parseInt(String s) 의 경우 10진수의  Integer 형을 반환한다고 명시 했습니다. 



1
2
3
4
System.out.println(Integer.parseInt("1004"));
System.out.println(Integer.parseInt("2018"8));
System.out.println(Integer.parseInt("1004"10));
System.out.println(Integer.parseInt("1004"16));

cs


위와 같이 예제로 사용한 함수를 프린트 해보겠습니다. 


결과는 아래와 같습니다. 


1004

516

1004 --> Integer.parseInt("1004") 한 값과 동일 합니다. 

4100



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D



블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


이번에는 For loop 중에서도 "향상된 For 문" (Enhanced For Loop) 에 대해 알아 보겠습니다. 


■ 기존 For Loop 


기존 For 문은 아래와 같습니다.


for( initialization; termination; increment ){

// statement(s)

}


1
2
3
for (int i = ; i < ; i++) {
    System.out.println("i = "+i);
}
cs


위 예문과 같이 변수 초기화, 종료조건, 변수 증감치에 대한 정의를 하는 것이 우리가 기존에 알고 있던 for loop 입니다. 


실행 결과는 아래와 같습니다. 


i = 0

i = 1

i = 2

i = 3

i = 4




■ 향상된 For 문 (Enhanced For Loop)


for ( declaration : expression ) {

// statement(s)

}


구조가 우리가 알고 있던 For loop 과 다릅니다. Java 5.0 이상부터 지원하는 for 문입니다. 

declaration > 변수 선언 

expression > 배열 또는 배열을 리턴하는 함수 (배열의 값을 변경 할 수는 없고 사용만 가능합니다)


예제를 보겠습니다. 

1
2
3
4
String[] strArr = {"향상된""FOR""LOOP""테스트"};
for(String arr : strArr){
    System.out.println(arr);
}
cs


위와 같은 형태로 배열을 사용하여 for 문을 돌립니다. 


실행 결과는 아래와 같습니다. 


향상된

FOR

LOOP

테스트



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D




블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,




안녕하세요. 제임스입니다. 


계속해서 날짜 관련 코드 작성법에 대해 정리하고 있는데요. 오늘은 날짜를 원하는 형식으로 프린트 하는 방법에 대해 알아 보겠습니다. 

앞선 포스팅에서는 각각의 년, 월, 일, 시간 값들을 뽑아낸 후 아래와 같이 이쁘지 않은 형태로 프린트 했었습니다.


1
System.out.println(year+"."+month+"."+date+"("+korDayOfWeek+") "+hour+":"+minute+":"+second);
cs


이렇게 프린트 하기 위해 너무 많은 코드를 작성해야 합니다. 


그래서 자바에서는  SimpleDateFormat 이라는 무지무지 고마운 클래스를 제공하고 있습니다. 

지금부터 이 SimpleDateFormat 에 대해 알아 보겠습니다. 


■ SimpleDateFormat


참고: https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html


이 클래스는 날짜를 원하는 포맷으로 파싱시켜 주는 역할을 합니다.

이때 사용하는 패턴들이 있는데요. 그 패턴 중 우리가 사용할 몇가지만 정리해보겠습니다. 


Letter

Date or Time Component

Presentation

Examples

y

Year

199696

M

Month

JulyJul07

d

Number

10

H

시간(24시간)

Number

0

h

시간(am/pm)

Number

12

m

Number

30

s

Number

55


예제를 보겠습니다. 


1
2
3
4
5
SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
 
Calendar cal = Calendar.getInstance();
        
System.out.println(sdf.format(cal.getTime()));
cs


위와 같이 simpleDateFormat 생성자에 패턴을 입력 했습니다. 

format 함수를 이용하여 프린트 하면 원하는 패턴의 날짜형식이 리턴되게 됩니다. 


yyyy > 2018 과 같이 년도를 4자리로 표현하라는 의미 입니다. 

MM > 시간의 분을 나타내는 mm 과 구분해야 하는데요. 대문자 MM 으로 써야 월을 의미합니다. 

dd > 일을 의미 합니다 (해당 달의 몇번째 일인지를 의미)

HH > 시간 중 시를 의미 하며 HH 는 24시간으로 표기 hh 는 12시간 기준으로 am/pm 을 추가로 표기 가능합니다. 

mm > 시간의 분을 나타내는 것으로 월을 의미하는 MM 과 구분해야 합니다. 

ss > 초를 의미 합니다. 


년도를 의미하는 yyyy를 제외한 MM.dd HH:mm:ss 들이 두자리로 표기되어 있습니다 .

월/일 시:분:초 모두 최대 두자리로 표기 되기 때문인데요. 한자리일 경우 그냥 한자리로 표기 됩니다. 


위 코드를 실행한 결과 값은 다음과 같습니다. 

2018.01.06 01:35:44


yyyy 대신 yy 만 사용하게 되면 년도의 마지막 두자리만 표기 됩니다. 


1
2
3
4
5
SimpleDateFormat sdf = new SimpleDateFormat("yy.MM.dd HH:mm:ss");
 
Calendar cal = Calendar.getInstance();
        
System.out.println(sdf.format(cal.getTime()));
cs


결과 값은 다음과 같습니다. 

18.01.06 01:47:47



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D




블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,




바로 전 포스팅에서 Calendar 객체를 이용하여 현재 날짜, 요일, 시간 정보를 가져 오는 방법에 대해 정리 했습니다. 


이번에는 원하는 날짜 및 시간 정보 등을 입력 하고 이를 다시 사용 하는 방법에 대해 정리 하겠습니다. 


String startDate = "20180505083000";

위와 같이 날짜 정보를 startDate 라는 변수에 String 형으로 입력 했습니다. 

2018년 5월 5일 08시 30분 00초 를 정의 한 텍스트 입니다. 


역시 Calender 객체를 이용하기 위해서는 Calendar.getInstance() 를 사용 합니다. 

Calendar cal = Calendar.getInstance();

위와 같은 상태에서 cal 정보를 확인 하면 현재시간 정보가 나옵니다. (이전 포스팅 참조)


여기에 원하는 startDate 정보를 대입해 줍니다. 

cal.set(Calendar.YEAR, Integer.parseInt(startDate.substring(0, 4)));
cal.set(Calendar.MONTH, Integer.parseInt(startDate.substring(4, 6)) - 1);
cal.set(Calendar.DATE, Integer.parseInt(startDate.substring(6, 8)));

cal.set(Calendar.HOUR, Integer.parseInt(startDate.substring(8, 10)));
cal.set(Calendar.MINUTE, Integer.parseInt(startDate.substring(10, 12)));
cal.set(Calendar.SECOND, Integer.parseInt(startDate.substring(12, 14)));

각각의 Calendar 객체 상수값에 대입하는데요. 여기서 한가지 주의 할 점은 Calendar.MONTH 에는 5 가 그대로 입력 되면 안된다는 것입니다. Calendar.MONTH 값이 5일 경우 이는 6월을 의미 하므로 -1 을 한 값을 입력해 주어야 합니다. (이전 포스팅 참조)


이제 cal 에는 현재 날짜 정보를 대신하여 2018년 5월 5일 08시 30분 00초 라는 정보가 셋팅 되었습니다. 

확인은 아래와 같이 해보겠습니다. 

int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int date = cal.get(Calendar.DATE);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

int hour = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);

String korDayOfWeek = "";
switch (dayOfWeek) {
case 1:
korDayOfWeek = "일";
break;
case 2:
korDayOfWeek = "월";
break;
case 3:
korDayOfWeek = "화";
break;
case 4:
korDayOfWeek = "수";
break;
case 5:
korDayOfWeek = "목";
break;
case 6:
korDayOfWeek = "금";
break;
case 7:
korDayOfWeek = "토";
break;
}

System.out.println(year+"."+month+"."+date+"("+korDayOfWeek+") "+hour+":"+minute+":"+second);

dayOfWeek 값을 별도 입력 하지 않아도 2018년 5월 5일 날짜 정보를 조회하여 요일 정보를 가져 옵니다. 

위 코드를 실행 하면 아래와 같은 결과 값을 리턴합니다. 


2018.5.5(토) 8:30:0


2018년 5월 5일이 토요일이네요 ^^


String startDate = "20180319083000";

날짜를 2018년 3월 19일로 설정해봤습니다. 

위 코드를 그대로 실행 시키면 아래와 같은 결과 값을 리턴합니다. 


2018.3.19(월) 8:30:0


2018년 3월 19일이 월요일이 맞습니다. 잘 동작하네요 ^^


이번 예제와 같이 날짜정보를 String 형으로 제공 하는 경우는 보통 API 호출 또는 전문 호출등을 통해 특정 날짜 정보를 가져 올 경우 형식은 정해져 있으나 (ex. yyyyMMddHHmmss) 어떤 값이 올지 모를 경우에 많이 사용합니다. 


만약 정확한 날짜 정보를 알고 있다면 아래와 같이 직접 입력 하는 방법도 사용 가능합니다. 

cal.set(Calendar.YEAR, 2018);
cal.set(Calendar.MONTH, Calendar.MAY);
cal.set(Calendar.DATE, 5);

cal.set(Calendar.HOUR, 8);
cal.set(Calendar.MINUTE, 30);
cal.set(Calendar.SECOND, 0);

처음 방식과 다르게 Calendar.MONTH 에 Calendar.MAY 라는 값을 셋팅 했습니다. 5월이라는 상수 값을 그대로 입력 했으므로 처음과 달리 -1 을 하거나 할 필요가 없습니다. 


물론 결과는 위와 동일 합니다 :)



 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D




블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


이번에는 자바 Calendar 클래스를 이용하여 오늘 날짜, 요일 및 시간을 구하는 방법에 대해 알아 보겠습니다. 



import java.util.Calendar;
Calendar cal = Calendar.getInstance();
System.out.println(cal);

위와 같이 Calendar 객체의 getInstance() 만 해도 아래와 같이 현재 날짜 정보를 가져 올 수 있습니다. 


java.util.GregorianCalendar[time=1514906028783,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=22,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2018,MONTH=0,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=3,DAY_OF_YEAR=3,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=13,SECOND=48,MILLISECOND=783,ZONE_OFFSET=32400000,DST_OFFSET=0]


위 결과 중 우리가 일반적으로 필요로 하는 부분을 붉은 색으로 표기 했습니다. 

key = value 조합으로 나오는 것을 확인하실수 있습니다. 


여기서 key 로 나오는 값이 우리가 Calendar 객체에서 가져올 상수 값입니다. 

즉, 아래와 같이 사용 가능합니다. 


int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int date = cal.get(Calendar.DATE);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

int hour = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);

Calender.MONTH 값은 0 ~ 11 까지 존재 하며 각각의 값이 1월 부터 12월을 의미 합니다. 즉, 현재 월을 구하기 위해서는 해당 값에 +1 을 해야 합니다. 


Calendar.DAY_OF_WEEK 는 요일을 의미하며 1 ~ 7 까지의 값을 리턴하며 각각은 일, 월 ~ 금, 토 요일을 의미 합니다. 

이는 아래와 같이 한글 요일값으로 변경 가능합니다. 물론 영문 요일값으로 변경하셔도 됩니다. 

String korDayOfWeek = "";
switch (dayOfWeek) {
case 1:
korDayOfWeek = "일";
break;
case 2:
korDayOfWeek = "월";
break;
case 3:
korDayOfWeek = "화";
break;
case 4:
korDayOfWeek = "수";
break;
case 5:
korDayOfWeek = "목";
break;
case 6:
korDayOfWeek = "금";
break;
case 7:
korDayOfWeek = "토";
break;
}


위 코드를 아래와 같이 프린트 해보겠습니다. 

System.out.println("년도: "+year+"\n월: "+month+"\n일: "+
date+"\n요일: "+dayOfWeek+"("+korDayOfWeek+")"+
"\n시간 : "+hour+"\n분: "+minute+"\n초: "+second);

년도: 2018

월: 1

일: 3

요일: 4(수)

시간 : 0

분: 13

초: 48


이를 일반적인 시간 표현 방식으로 변경해보겠습니다. 

System.out.println(year+"."+month+"."+date+"("+korDayOfWeek+") "+hour+":"+minute+":"+second);

2018.1.3(수) 0:13:48



자바 Calendar 객체를 이용하여 현재 날짜, 요일 및 시간 구하는 방법을 간단히 알아 봤습니다. 

아래는 전체 코드 입니다. 


Calendar cal = Calendar.getInstance();
System.out.println(cal);

int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int date = cal.get(Calendar.DATE);
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

int hour = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);

String korDayOfWeek = "";
switch (dayOfWeek) {
case 1:
korDayOfWeek = "일";
break;
case 2:
korDayOfWeek = "월";
break;
case 3:
korDayOfWeek = "화";
break;
case 4:
korDayOfWeek = "수";
break;
case 5:
korDayOfWeek = "목";
break;
case 6:
korDayOfWeek = "금";
break;
case 7:
korDayOfWeek = "토";
break;
}

System.out.println("년도: "+year+"\n월: "+month+"\n일: "+
date+"\n요일: "+dayOfWeek+"("+korDayOfWeek+")"+
"\n시간 : "+hour+"\n분: "+minute+"\n초: "+second);

System.out.println(year+"."+month+"."+date+"("+korDayOfWeek+") "+hour+":"+minute+":"+second);



Calendar 객체에 대해서는 아래 API 링크 참조 하시면 좀더 많은 정보를 접하실수 있습니다. 

https://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D

 


블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,



안녕하세요. 제임스 입니다. 


이번에는 자바에서 문자열 비교방법에 대해 알아보고 차이점에 대해서도 알아 보겠습니다. 



■ Primitive Type(기본형) 비교


String a = "test";
String b = "test";

위와 같이 기본형 문자열이 두개 있습니다. 

모두 test 라는 값을 가지고 있습니다. 


이를 비교 하는 방법은 "==" 연산자 와 "equals()" 함수 두가지 정도 있습니다. 


사용방법은 아래와 같습니다. 

if(a == b){
System.out.println("a == b");
}else {
System.out.println("a != b");
}

if(a.equals(b)){
System.out.println("a equals to b");
}else {
System.out.println("a not equals to b");
}

변수 a, b 모두 primitive type (기본형) 으로 정의 되어 "==" 연산자를 사용하거나 "equals()" 함수를 사용하더라도 동일한 결과를 리턴받습니다. 위의 코드를 실행 시키면 아래와 같은 결과를 리턴 받습니다. 


a == b

a equals to b



■ Reference Type(참조형) 비교


만약 변수를 reference type (참조형) 으로 정의 하면 어떻게 될까요? 

String c = new String("test");
String d = new String("test");

변수 c, d 모두 "test" 라는 값을 가지는 reference type 으로 정의를 했습니다. 


단순히 c 와 d 값을 찍어 보겠습니다. 

System.out.println("c = ["+c+"]");
System.out.println("d = ["+d+"]");

결과를 보면 아와 같이 동일하게 test 라는 값을 리턴 시켰습니다. 


c = [test]

d = [test]


하지만 "==" 와 "equals()" 를 이용하여 비교 하였을때 결과는 어떨까요? 

if(c == d){
System.out.println("c == d");
}else {
System.out.println("c != d");
}

if(c.equals(d)){
System.out.println("c.equals(d)");
}else {
System.out.println("!c.equals(d)");
}

c != d

c.equals(d)


if(c == d) 라는 조건식의 결과가 c != d 라고 나왔습니다. 

왜 다르다는 걸까요? 

가지고 있는 value 값은 "test"로 동일하게 보이지만 c 와 d 의 경우 서로 다른 메모리 값을 가지고 있으며 이 메모리 주소값이 다르기 때문에 다른 값이라는 결과를 리턴 시켜 줍니다. 


즉, Reference Type 의 경우  c == d 라는 의미는 값이 같은가를 비교하는 수식이 아니라 c 와 d 의 주소가 같은지를 비교하는 수식입니다

반대로 primitive type 은 값의 비교를 하는 것이 맞습니다. 


if(c == "test"){
System.out.println("c == \"test\"");
}else {
System.out.println("c != \"test\"");
}

이제 위의 결과 값이 어떻게 될지는 충분히 유추 가능하시겠죠? 


c != "test"

네 위와 같이 다른 값이라는 결과 값을 리턴 합니다. ^^




 도움이 되셨다면 로그인이 필요 없는 

▼ 하트 클릭 한번 부탁 드립니다 

감사합니다 :D

블로그 이미지

쉬운코딩이최고

Android, Java, jsp, Linux 등의 프로그래밍 언어를 소개 합니다.

,