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


앞서 Calendar 객체를 이용하여 원하는 날짜 및 시간 정보를 셋팅하고 이를 프린트 해봤는데요. 

이번에는 조금 다른 방법으로 데이터를 셋팅해 보겠습니다. 


GregorianCalendar 클래스를 이용하는 방법입니다. 

(참고) https://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html




■ GregorianCalendar 클래스 생성자 


GregorianCalendar 클래스는 몇가지 생성자를 제공하고 있습니다. 그중 우리가 관심있는 몇 가지만 살펴 보겠습니다. 


public GregorianCalendar(int year,
                 int month,
                 int dayOfMonth)

GregorianCalendar 생성자 중 가장 기본으로 생각 됩니다. 세가지 파라미터 값을 입력 받으며 년,월,일 을 표기 합니다. 

GregorianCalendar(년, 월, 일) 형태의 입력을 받습니다. 


public GregorianCalendar(int year,
                 int month,
                 int dayOfMonth,
                 int hourOfDay,
                 int minute)

GregorianCalendar(년도, 월, 일, 시, 분) 형식으로 입력 하는 생성자를 제공하고 있습니다. 


public GregorianCalendar(int year,
                 int month,
                 int dayOfMonth,
                 int hourOfDay,
                 int minute,
                 int second)

GregorianCalendar(년도, 월, 일, 시, 분, 초) 형식으로 입력 하는 생성자를 제공하고 있습니다. 



■ GregorianCalendar 예제


Calendar cal = new GregorianCalendar(2018,0,5,1,13,56);

위에서 정리한 생성자 중 세번째 생성자를 사용하여 초단위까지 입력을 했습니다. 

입력 값은 2018년 1월 5일 1시 13분 56 초 입니다. 


물론 1월 (Calendar.MONTH == 0) 을 설정하는데 왜 0 을 입력 했냐는 질문을 안하시리라 믿습니다 :)


위 코드는 아래와 같이 변경 가능합니다. 

Calendar cal = new GregorianCalendar(2018,Calendar.JANUARY,5,1,13,56);

이제 설정한 값을 앞선 포스팅과 같이 프린트 해보겠습니다. 


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);

결과는 아래와 같이 리턴 됩니다. 


2018.1.5(금) 1:13:56


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

cal.set(Calendar.HOUR, 1);
cal.set(Calendar.MINUTE, 13);
cal.set(Calendar.SECOND, 56);

위와 같이 일일이 셋팅 해주는 것 보다는 GregorianCalendar 객체를 이용하는 것이 더욱 편하겠죠? ^^




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

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

감사합니다 :D




블로그 이미지

쉬운코딩이최고

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

,



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


연말이 다가오니 실적때문인지... 업무가 몰리고 있습니다. 

덕분에 오랜만에 포스팅을 하게 되네요. 


오늘은 자바에서 valueOf 와 parseInt 의 차이점에 대해 정리 해보겠습니다. 


int a = Integer.valueOf("1234");
int b = Integer.parseInt("1234");
System.out.println("a = ["+a+"]");
System.out.println("b = ["+b+"]");

위와 같이 "1234" 라는 String 값을 하나는 Integer.valueOf() 로 다른 하나는 Integer.parseInt() 를 사용하여 출력 해봤습니다. 

결과는 아래와 같습니다. 


a = [1234]

b = [1234]


결과 상으로 봤을때 동일한 값을 리턴시켜주고 있습니다. 


하지만 이 둘은 약간 다릅니다. 

그 차이점을 알아 보겠습니다 .



■ valueOf


API 에서는 아래와 같이 설명하고 있습니다. 

public static Integer valueOf(String s)
                       throws NumberFormatException
Returns an Integer object holding the value of the specified String. The argument is interpreted as representing a signed decimal integer, exactly as if the argument were given to the parseInt(java.lang.String) method. The result is an Integer object that represents the integer value specified by the string.

In other words, this method returns an Integer object equal to the value of:

new Integer(Integer.parseInt(s))
Parameters:
s - the string to be parsed.
Returns:
an Integer object holding the value represented by the string argument.
Throws:
NumberFormatException - if the string cannot be parsed as an integer.


간단히 요약하자면 valueOf 의 리턴되는 결과값은 new Integer() 로 객체입니다. 



pareseInt

public static int parseInt(String s)
                    throws NumberFormatException
Parses the string argument as a signed decimal integer. The characters in the string must all be decimal digits, except that the first character may be an ASCII minus sign '-' ('\u002D') to indicate a negative value or an ASCII plus sign '+' ('\u002B') to indicate a positive value. The resulting integer value is returned, exactly as if the argument and the radix 10 were given as arguments to the parseInt(java.lang.String, int) method.
Parameters:
s - a String containing the int representation to be parsed
Returns:
the integer value represented by the argument in decimal.
Throws:
NumberFormatException - if the string does not contain a parsable integer.


요약하면 parseInt 의 리턴되는 결과값은 int 로 기본 자료형 (primitive type) 입니다. 



문자열을 변환할 경우 기본 자료형(primitive type) 으로 받아 오고 싶을때는 parseInt 를 사용하고 new Integer() 형으로 반환하고 싶으면 valueOf 를 사용하면 됩니다. 




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

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

감사합니다 :D



블로그 이미지

쉬운코딩이최고

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

,



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


이번 포스팅은 자바 String 관련 함수 중 영문자를 전부 대문자로 또는 소문자로 변경 하는 함수와 인자값으로 입력된 문자열의 앞뒤 공백을 제거 하는 함수에 대해 정리해 보겠습니다. 



■ String toUpperCase()

대상 문자열을 모두 대문자로 변환합니다. 

String str1 = "hello java";

System.out.println(str1.toUpperCase());

hello java 라는 문자열이 모두 소문자로 되어 있습니다. 

이를 toUpperCase() 함수를 이용하여 대문자로 변환 하겠습니다. 


실제 코드는 아래와 같습니다. 

"hello java".toUpperCase();


모든 문자열을 대문자로 변환하기 때문에 결과는 아래와 같습니다. 

HELLO JAVA



■ String toLowerCase()

대상 문자열을 모두 소문자로 변환합니다. 

String str2 = "UPPER CASE TO LOWER CASE";

System.out.println(str2.toLowerCase());

"UPPER CASE TO LOWER CASE" 라는 문자열을 소문자로 변환합니다. 


"UPPER CASE TO LOWER CASE".toLowerCase();

위와 같은 코드로 작성 되었다고 생각 하시면 됩니다. 


결과는 예상 하시는 데로 upper case to lower case 로 리턴 됩니다. 




이번에는 문자열에 대소문자가 모두 들어 있는 예를 보겠습니다. 

String str3 = "James Dreaming";

변수 str3 의 값이 대소문자 섞여 있습니다. 


이를 toUpperCase() 또는 toLowerCase() 해보겠습니다. 

System.out.println(str3.toLowerCase());

toLowerCase() 를 하여 모든 대문자를 소문자로 변환 합니다. 

결과는 james dreaming 으로 리턴 됩니다. 


System.out.println(str3.toUpperCase());

이번에는 toUpperCase() 를 했습니다. 모든 소문자를 대문자로 변환 합니다. 

결과는 JAMES DREAMING  으로 리턴 됩니다. 



■ String trim()

대상 문자열의 앞 / 뒤 공백문자를 모두 제거하여 리턴해줍니다. 

String str4 = "   공백 제거   ";

System.out.println("["+str4+"]");

str4 변수를 위와 같이 출력 하면 아래와 같은 결과 값이 나옵니다. 

앞뒤로 " [ " 와 " ] " 를 붙인 이유는 결과 값 앞뒤로 공문 문자가 있을을 확인하기 위함입니다.

[   공백 제거   ]


System.out.println("["+str4.trim()+"]");

위와 같이 str4.trim() 을 하고 결과 값을 확인하면 아래과 같습니다. 

[공백 제거]


앞뒤 공백이 제거 되었습니다. 여기서 유의 할 점은 문자열 중간에 있는 공백 문자는 제거 되지 않았습니다. 


trim() 함수도 정말 많이 사용하게 되는 함수 입니다. 잘 기억해 두시고 유용하게 사용하시길 바랍니다. 



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

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

감사합니다 :D



블로그 이미지

쉬운코딩이최고

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

,



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


이번 포스팅도 역시 자바의 String 관련 함수를 정리 하고자 합니다. 


이번에는 대상 문자열이 특정 문자 또는 문자열로 시작 하거나 끝나는지에 대해 체크 할 수 있는 함수를 알아 보겠습니다. 


■ boolean startsWith(String prefix)


비교 대상 문자열이 입력된 문자열 (prefix) 값으로 시작되는지 여부를 확인하고 boolean (true / false) 값으로 리턴 합니다. 

String str1 = "자바 코딩";

System.out.println(str1.startsWith("자바"));

위 예제는 "자바 코딩" 이라는 문자열이 "자바" 로 시작되는지를 체크 해보는 코드 입니다. 


비교대상문자열.startsWith("체크할문자열")

>>> str1.startsWith("자바")


위 코드를 다시 쓰면 아래와 같습니다. 

"자바 코딩".startsWith("자바");


str1 이라는 문자열이 "자바" 라는 문자열로 시작하고 있습니다. 

결과는 true 입니다. 



다른 예제 하나 더 보시겠습니다. 

String str2 = "자바코딩";

System.out.println(str2.startsWith("자바 "));

이번에 비교대상문자열이 "자바코딩" 으로 첫번째 예제와 다르게 공백문자가 빠졌습니다.

그리고 체크할문자열(prefix) 는 "자바 " 로 자바뒤에 공백 문자가 한칸 들어 갔습니다. 


위 코드는 아래와 같이 쓸수 있습니다. 

"자바코딩".startsWith("자바 ");


결과는 당연히 false 입니다. 


만약 비교대상문자열이 "자바 코딩" 이었다면 true 가 리턴 되었겠죠? ^^



■ boolean endsWith(String suffix);

String str3 = "자바 코딩";

System.out.println(str3.endsWith("코딩"));

"자바 코딩" 이라는 문자열이 "코딩" 이라는 문자열로 끝나는지를 확인 합니다. 


위코드를 다시 쓰면 아래와 같습니다. 

"자바 코딩".endsWith("코딩");


눈으로 봐도 비교대상문자열이 "코딩"으로 끝나고 있음을 알 수 있습니다. 

결과는 true 가 되겠죠. 



또 다른 예제 하나 더 보시겠습니다. 

String str4 = "자바 코딩 ";

System.out.println(str4.endsWith("코딩"));

이번에는 비교대상 문자열 끝에 공백문자가 하나 들어 갔습니다. 

그리고 suffix 는 바로 앞과 동일하게 "코딩" 으로 입력을 했습니다. 


"자바 코딩 ".endsWith("코딩");


위 코드는 당연히 false 가 리턴 되겠죠? ^^




예를 들기 위해 간단한 문자열을 이용했는데요. 어떤 값이 들어 올지 모르는 상황에서 위 두가지 함수를 사용한다면 좀더 편하게 코드를 깔끔하게 정리 할 수 있습니다. 



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

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

감사합니다 :D



블로그 이미지

쉬운코딩이최고

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

,



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


이번에는 자바 String 관련 함수 중 특정 문자열을 원하는 문자열로 치환하는 함수에 대해 알아 보겠습니다. 


■ String replace(CharSequence target, CharSequence replacement)


replace() 함수의 첫번째 인자값은 변환하고자 하는 대상이 되는 문자열입니다. 두번째 인자 값은 변환할 문자 값입니다. 


예제를 보시겠습니다. 

String str1 = "aaaa";

System.out.println("result ===> "+str1.replace("aa", "b"));

앞에서 부터 순차적으로 "aa" 라는 문자값이 있을 경우 "b" 로 치환하기 때문에 결과 값은 아래와 같습니다. 

result ===> bb


다른 예제도 하나더 보겠습니다. 

String str2 = "자바 코딩";

System.out.println("result ===> "+str2.replace("바 코", "good"));

치환하고자 하는 문자열이 "바 코"로 공백문자를 포함한 문자 열입니다. 

이를 "good" 으로 치환하면 결과는 아래와 같습니다. 

result ===> 자good딩



■ String replaceAll(String regex, String replacement)


replace() 함수와 같이 첫번째 인자값은 변환하고자 하는 대상이 되는 문자열이며, 두번째 인자 값은 변환할 문자 값입니다. 


예제를 보시겠습니다. 

String str1 = "aaaa";

System.out.println("result ===> "+str1.replaceAll("aa", "b"));

replace() 의 첫번째 예제와 동일한 문자열을 이용하여 "aa" 라는 문자값을 "b" 로 변환 했습니다. 

결과 값은 아래와 같습니다. 

result ===> bb


두번째 예제도 replace() 의 두번째 문자열과 동일하게 사용해 보겠습니다. 

String str2 = "자바 코딩";

System.out.println("result ===> "+str2.replaceAll("바 코", "good"));

replace 를 replaceAll 로 바꾸기만 했습니다. 

결과는 아래와 같습니다. 

result ===> 자good딩



지금까지 예제들을 보시면 replace() 와 replaceAll() 함수의 차이점이 없어 보입니다. 

정말 차이가 없을까요? 차이점이 없는 동일한 동작을 하는 함수인데 이런 API를 제공할리 없겠죠? 

그럼 지금부터 이 두 함수가 뭐가 다른지 알아 보겠습니다. 


■ replace() vs replaceAll()


두 함수의 가장 큰 차이점은 입력 인자 값의 형이 하나는 CharSequence 이고 다른 하나는 String 이라는 겁니다. 여기서 String 이라는 것은 regular expression 즉, 정규표현식이라고 부르는 형식의 인자값을 사용할 수 있다는 겁니다. 


그럼 예제를 하나 보겠습니다. 

String str3 = "abcdefghijk";

System.out.println("result ===> "+str3.replaceAll("[abchij]", "굿"));

replaceAll 의 첫번째 인자 값으로 입력한 [abchij] 라는 값은 정규표현식 값으로 의미하는 바는 a, b, c, h, i, j 라는 값을 모두 의미 합니다. 

즉, 상기 값들 모두 "굿" 이라는 문자열로 변환하겠다는 의미 입니다. 


결과 값은 어떻게 나올까요? 

result ===> 굿굿굿defg굿굿굿k


비슷한 예제 하나 더 보시겠습니다. 

String str3 = "abcdefghijk";

System.out.println("result ===> "+str3.replaceAll("[^abchij]", "굿"));

동일 문자 열을 대상으로 replaceAll 을 하는데 이번에는 정규표현식에 " ^ " 라는 값이 들어 갔습니다. 

이는 a, b, c, h, i, j 를 제외한 모든 문자를 굿으로 변환 하겠다는 의미 입니다. 


결과 값은 아래와 같습니다. 

result ===> abc굿굿굿굿hij굿



replace 를 사용하여 위 replaceAll 한 결과 값을 가져 오기 위해서는 어떻게 해야 할까요? 

String str3 = "abcdefghijk";

System.out.println("result ===> "+
str3.replace("a", "굿")
.replace("b", "굿")
.replace("c", "굿")
.replace("h", "굿")
.replace("i", "굿")
.replace("j", "굿")
);

위와 같이 치환을 원하는 각각의 문자열을 모두 찾거나 연속적인 입력 값이라면 아래와 같이 하면 됩니다. 

String str3 = "abcdefghijk";

System.out.println("result ===> "+
str3.replace("abc", "굿굿굿")
.replace("hij", "굿굿굿")
);

이렇게 하면 첫번째 예제와 동일한 결과 값을 가져 올수 있습니다. 

result ===> 굿굿굿defg굿굿굿k


하지만 뭔가 많이 불편해 보이죠? 

더군다나 실제 대상 문자열이 어떤 형태 인지 모를 경우 replace() 함수만을 이용하여 작업 하기에는 무리가 있어 보입니다. 

그래서 불특정 입력값을 변환하고자 할 경우 replaceAll() 함수에 Regular Expression (정규표현식)을 이용하여 개발을 많이 하고 있습니다. 

물론 replace() 함수도 많이 사용하고 있지만 사용 처가 약간 다르니 이정도는 이해 하고 넘어 가는게 좋을 것 같습니다. 



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

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

감사합니다 :D

블로그 이미지

쉬운코딩이최고

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

,



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


이번에는 compareTo() 함수와 compareToIngnoreCase() 함수에 대해 정리해 보겠습니다. 



■ int compareTo(String str)

인자값으로 비교 대상 String 값을 입력 받습니다.

리턴되는 응답값은 비교 값이 동일할 경우 0 으로, 다를 경우 음의 정수 또는 양의 정수 값으로 표현됩니다. 정수값으로 표현된다는 말이 어려우시죠? 예문으로 확인 해보겠습니다. 

String str = "abc";

System.out.println("result 1 ==> "+str.compareTo("abc"));
System.out.println("result 2 ==> "+str.compareTo("bc"));
System.out.println("result 3 ==> "+str.compareTo("c"));
System.out.println("result 4 ==> "+str.compareTo("abcabc"));
System.out.println("result 5 ==> "+str.compareTo("abcabcd"));


위와 같이 "abc" 라는 String 값을 여러 문자열과 비교 해봤습니다. 

결과는 아래와 같습니다. 


result 1 ==> 0

result 2 ==> -1

result 3 ==> -2

result 4 ==> -3

result 5 ==> -4


1번의 경우 동일한 String 값이니 당연히 0 이라는 값을 리턴 합니다. 

2번의 경우 "bc" 만 같고 "a" 가 빠져 한자 차이로 다른 값이 되었습니다. 그래서 -1 값이 리턴 됩니다. 한자리 차이라는 의미죠.

3번의 경우 "c" 만 같고 "ab" 가 빠져 두자 차이로 다른 값이 되었습니다. -2 값이 리턴 되었구요, 역시 두자 차이라는 의미입니다. 

4번의 경우 "abc" 가 두번 반복 되었지만 문자열 비교로 봤을때는 전혀 다른 문자열입니다. 비교대상 문자열보다 "abc" 라는 문자열만큼 3자리가 길어서 -3 이라는 값이 리턴 되었습니다. 


String str = "abc";

System.out.println("result 6 ==> "+str.compareTo("ABC"));

이번에는 소문자 "abc"를 대문자 "ABC"와 비교해봤습니다. 

결과는 아래와 같습니다. 


result 6 ==> 32


앞선 예제와 달리 32 라는 결과 값이 나왔습니다. 

왜 이런 값이 나왔을까요? 


이 결과 값을 이해 하려면 ASCII 코드에 대해 알아야 하는데요. 이 ASCII 코드는 문자를 컴퓨터가 이해 할 수 있는 숫자 형태로 변환한 코드 값이라고 이해 하시면 됩니다. (자세한건 차후에 다루도록 하겠습니다)


이 ASCII 코드 상에서 "a" 와 "A" 의 값을 확인해 보겠습니다. 



붉은 색으로 칠해진 부분의 Decimal 값을 참조 하시면 됩니다. 

"A" 값은 65, "a" 값은 97 입니다. 이 차이가 32 인데요. 

비교 대상인 대문자 "ABC" 가 "abc" 보다 32 만큼 크기 때문에 양의 정수 값으로 리턴 되었습니다. 


그렇다면 반대로 비교 대상값이 소문자 "acb" 라면 어떤 결과 값이 나올까요? 

String str = "ABC";

System.out.println("result 7 ==> "+str.compareTo("abc"));

result 7 ==> -32


결과는 보시는 바와 같이 -32, 즉, 음의 정수 값으로 나오게 됩니다. 




■ int compareToIgnoreCase(String str)

앞서 설명드린 compareTo() 함수와 거의 모든 것이 같습니다. 단, 함수 명에서도 알수 있듯이 Ignore Case!!! 즉, 대소문자를 무시한다는 의미 입니다. 그럼 예제로 확인해보겠습니다. 


String str = "ABC";

System.out.println("result 8 ==> "+str.compareToIgnoreCase("abc"));
System.out.println("result 9 ==> "+str.compareToIgnoreCase("aBc"));

result 8 ==> 0

result 9 ==> 0


결과 값은 대소문자 무시하고 결과 값을 가져 옵니다. 



둘다 상당히 유용한 Java String 관련 함수 들입니다. 

잘 사용하면 개발에 참 유용하게 사용할 수 있습니다. 




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

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

감사합니다 :D


블로그 이미지

쉬운코딩이최고

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

,



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


이번에는 Java 에서 많이 사용하는 String 관련 함수를 알아 보겠습니다. 


앞서 substring 이라는 함수에 대해 정리 했었는데요. 이녀석과 함께 많이 사용하고 있는 함수들을 정리 하면 아래와 같습니다. 


charAt(), indexOf(), length()


■ charAt(int index)

입력 받은 index 번째 문자를 반환 합니다. 

Java 에서 index 값은 항상 0 에서 부터 시작 합니다. 


String str1 = "abcde";

System.out.println(str1.charAt(2));

str1 을 charAt(2) 한 결과 값은 아래와 같습니다. 


문자열

a

b

c

d

e

index

0

1

2

3

4


index 값이 2 인 문자가 c 입니다. 

즉, 결과값은 "c" 가 리턴 됩니다. 



■ indexOf(String keyword)

문자열 중 입력받은 문자가 있으면 해당 문자의 위치 (index) 값을 리턴하고 문자가 없으면 -1 을 리턴 합니다. 

문자열 조회는 index 값 0 부터 시작 합니다 (왼쪽 부터 읽기 시작함을 의미 합니다)


String str2 = "Definition of indexOf";

System.out.println(str2.indexOf("i"));


위와 같은 경우 결과 값은 아래와 같습니다. 


문자열

D

e

f

i

n

i

t

i

o

n

o

f

i

n

d

e

x

O

f

index

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20


첫 "i" 값이 있는 index 값 3 이 리턴 됩니다. 



만약 아래와 같이 "of" 라는 문자열과 "off" 라는 문자열을 찾을 경우 결과 값은 어떻게 나올까요? 


String str3 = "Definition of indexOf";

System.out.println(str3.indexOf("of"));
System.out.println(str3.indexOf("off"));

"of" 라는 문자열을 찾는 경우 index 값이 11 로 리턴됩니다. 

하지만 "off "라는 문자열은 전체 문장중에서 찾을 수 없는 문자 열이므로 -1 이 리턴 됩니다. 



■ lastIndexOf(String keyword)

indexOf 는 왼쪽에서 부터 조회를 하기 때문에 낮은 index 값을 먼저 조회 하게 됩니다. 

이와 반대로 끝에서 부터 조회를 하는 함수도 제공되고 있습니다. 

이것이 바로 lastIndexOf 함수 입니다. 


String str4 = "Definition of indexOf";

System.out.println(str4.lastIndexOf("i"));

이 경우 뒤에서 부터 " i " 값을 찾기 때문에 아래와 같이 index 값이 14 로 리턴됩니다.


문자열

D

e

f

i

n

i

t

i

o

n

o

f

i

n

d

e

x

O

f

index

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20




■ length()

주어진 문자열의 길이를 리턴 합니다. 

주의 할 것은 index 값을 리턴 하는게 아니라 실제 문장의 길이를 조회 리턴 한다는 겁니다. 


String str5 = "a";

System.out.println(str5.length());

위 문자의 경우 a 의 index 값은 0 이지만 실제 문자 길이는 1 입니다. (결과 값도 1로 리턴 됩니다)


indexOf 설명을 위해 이용한 문자열 "Definition of indexOf" 의 경우 마직막 indexOf 의 "f"의 index 값은 20 이지만 index 는 0 에서 시작하므로 +1 을 해야 실제 문자열의 길이가 나옵니다. 


하지만 우리는 이 길이를 굳이 계산할 필요가 없죠. 

위와 같이 바로 str5.length() 를 해버리면 결과 값이 1로 리턴 됩니다. 



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

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

감사합니다 :D



블로그 이미지

쉬운코딩이최고

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

,



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


이번에는 Java에서 배열을 정렬하는 방법에 대해 알아 보겠습니다. 


Java 에서 배열(array)을 정렬하는 방법은 간단합니다. 바로 자바에서 제공하고 있는 함수를 사용하는 것이죠. 

제목에도 보시면 아시겠지만 Arrays.sort(배열) 이라는 함수를 사용하면 됩니다. 


■ 숫자 배열의 정렬

int numSort[] = {37, 27, 40, 30, 28, 19};
Arrays.sort(numSort);

for(int i = 0; i < numSort.length; i++){
System.out.println("[ i = "+i+" ]--------[ "+numSort[i]+" ]");
}

numSort 라는 배열에 6개의 숫자를 추가 했습니다. 


그리고 Arrays.sort() 함수를 이용하여 numSort 배열을 정렬 합니다. 

그리고 그것을 for loop 을 돌려서 로그를 찍어 봤습니다. 


물론 결과는 예상 하시는 대로 나옵니다 :)


[ i = 0 ]--------[ 19 ]

[ i = 1 ]--------[ 27 ]

[ i = 2 ]--------[ 28 ]

[ i = 3 ]--------[ 30 ]

[ i = 4 ]--------[ 37 ]

[ i = 5 ]--------[ 40 ]


이쁘게 정렬이 되었습니다. 



■ 영문 배열의 정렬

숫자는 위와 같이 정렬이 됨을 확인 했지만.... 문자열은? 영문 배열은? 이라는 의문 부호가 붙을 수 있습니다. 

영문 배열도 숫자와 동일한 방식으로 처리 하면 됩니다. 

아래 예제를 함께 보시겠습니다. 

String engStrSort[] = {"lovely", "random", "uptown", "girl", "extra"};
Arrays.sort(engStrSort);

for(int i = 0; i < engStrSort.length; i++){
System.out.println("[ i = "+i+" ]--------[ "+engStrSort[i]+" ]");
}

처음 숫자 배열과 다른건 딱 하나 있습니다. 바로 배열 형이 int 에서 String 으로 바뀐것 그리고 배열 값들이 숫자가 아닌 영문으로 바뀐 것이죠? 


결과는 역시 아래와 같이 나옵니다 :)


[ i = 0 ]--------[ extra ]

[ i = 1 ]--------[ girl ]

[ i = 2 ]--------[ lovely ]

[ i = 3 ]--------[ random ]

[ i = 4 ]--------[ uptown ]



■ 한글 배열의 정렬

숫자도 해봤고 영문도 해봤는데 특별히 다를게 있을까요? 

당연히 영문 배열의 정렬때와 동일하게 처리 하면 됩니다. 다만 텍스만 영문을 한글로 바꾸는 거죠? 

한글도 당연히 이쁘게 정렬을 해줍니다. 

String korStrSort[] = {"박길동", "이영자", "홍길동", "장발장", "신발장"};
Arrays.sort(korStrSort);

for(int i = 0; i < korStrSort.length; i++){
System.out.println("[ i = "+i+" ]--------[ "+korStrSort[i]+" ]");
}

결과는 당연히 아래와 같이 이쁘게 정렬되어 나옵니다. 


[ i = 0 ]--------[ 박길동 ]

[ i = 1 ]--------[ 신발장 ]

[ i = 2 ]--------[ 이영자 ]

[ i = 3 ]--------[ 장발장 ]

[ i = 4 ]--------[ 홍길동 ]



고맙게도 자바에서 sort 함수를 제공해주어 우리는 편하게 배열의 정렬을 할 수 있습니다. 



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

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

감사합니다 :D



블로그 이미지

쉬운코딩이최고

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

,