length();
length()는 메서드(함수)로, 문자열의 길이를 알고자 할 때 사용됩니다.
즉 글자의 수를 알고자 할 때 사용합니다.
자바는 16비트 유니코드를 사용하기에, 모든 글자들이 한글이든 영문이든 항상 1개로 간주됩니다.
아래는 length()과 length의 차이입니다.
1
2
3
4
5
|
String a = "abcd1234";
System.out.println(a.length());// String 문자의 길이
String[] b = { "abc", "def", "ghi", "12", "34"};
System.out.println(b.length);// 배열원소의 개수
|
cs |
<실행 결과>
8 |
length;
length는 배열의 길이를 알고자 할 때 사용됩니다.
아래 그림과 같이 arr 배열에 인덱스 5개를 생성한 후, 배열의 크기를 알아보기 위해 사용하는 것이 length입니다.
1
|
int arr[] = new int [5 ];
|
cs |
arrSize 변수에 arr 배열의 크기를 넣어 출력해보면 배열의 크기 [5]가 출력될 것입니다.
배열에서 사용 가능한 length는 최초 배열이 생성될 때 길이가 결정되는 상수인 셈입니다.
1
|
int arrSize = arr.length ;
|
cs |
이러한 특성으로 length 필드는 배열의 크기만큼 반복할 때 유용하게 사용되고 있습니다.
다음 예제는 cars 배열의 모든 요소를 출력합니다.
1
2
3
4
|
String [] cars = {"Volvo", "BMW", "Ford", "Mazda"};
for (int i = 0 ; i < cars.length ; i ++) {
System .out .println (cars[i]);
}
|
cs |
<실행결과>
Volvo |
여기서 중요한 점은 빈칸인(띄어쓰기) 또한 length에 속해서 계산이 된다는 것입니다.
"고 양 이"의 length 길이는 5라는 것을 알 수 있습니다.
equals();
equals는 두 개의 문자열이 동일한 값을 가지고 있는지를 비교하여 결괏값을 리턴합니다.
1
2
3
4
5
|
String a = "hello";
String b = "java";
String c = "hello";
System .out .println (a.equals (b)); // false
System .out .println (a.equals (c)); // true
|
cs |
문자열 a와 문자열 b 는 "hello"와 "java"로 서로 다릅니다. 따라서 equals 메서드 호출 시 false를 리턴합니다.
문자열 a 와 문자열 c는 "hello"와 "hello"로 서로 같습니다. 따라서 true를 리턴합니다.
문자열의 값을 비교할 때는 반드시 equals를 사용해야 합니다.
== 연산자를 사용할 경우 다음과 같은 경우가 발생할 수 있습니다.
1
2
3
4
|
String a = "hello";
String b = new String ("hello");
System .out .println (a.equals (b));
System .out .println (a ==b);
|
cs |
문자열 a와 b는 모두 "hello"로 같은 값이지만 equals를 호출했을 때는 true를 == 연산자를 이용했을 때는 false를 리턴합니다.
a와 b는 값은 같지만 서로 다른 객체이기 때문입니다.
== 은 두 개의 자료형이 동일한 객체인지를 판별할 때 사용하는 연산자이기 때문에 false를 리턴하게 됩니다.
즉, equals 메서드는 비교하고자 하는 대상의 내용 자체를 비교하지만 == 연산자는 비교하고자 하는 대상의 주소 값을 비교하기 때문에 결괏값은 각각 true, false로 출력될 것입니다.
format();
String클래스의 format 메서드는 지정된 위치에 값을 대입해서 문자열을 만들어 내는 용도로 사용합니다.
String.format() 메서드를 사용하면 C 언어의 printf 함수처럼 서식 문자열을 사용한 형식 문자열을 만들 수 있습니다.
%[인자 순서$][플래그][너비][정밀도] 데이터 타입
1. 데이터 타입
마지막에 위치한 데이터 타입은 출력하고자 하는 데이터 구분에 따라 다른 형태로 쓰입니다.
일반적으로 정수 % d, 실수 % f, 문자열 % s, 불리언 % b 가 이용되고 있으며 상세한 설정을 위해서는 표를 참고하시기 바랍니다.
format | 설명 |
%B, %b | 논리형 데이터에 사용 %b 는 "true"나 "false"의 형태로 출력 %B 는 "TURE"나 "FALSE"의 형태로 출력 |
%C, %c | 문자형 데이터에 사용 사용 가능한 데이터는 Byte, Short, Character, Integer 등 문자 표현 가능 |
%d | 10진수 정수형 데이터에 사용 사용 가능한 데이터는 Byte, Short, Integer, Long, BigInteger 등 정수 표현 가능 |
%e | 10진수 지수형 데이터에 사용 사용 가능한 데이터는 Float, Double, BigDecimal 등 지수 표현 가능 |
%f | 일반적인 실수형 데이터에 사용 사용 가능한 데이터는 Float, Double, BigDecimal 등 실수 표현 가능 |
%x | 16진수 정수형 데이터에 사용 사용 가능한 데이터는 Byte, Short, Integer, Long, BigInteger 등 정수 표현 가능 |
%o | 8진수 정수형 데이터에 사용 사용 가능한 데이터는 Byte, Short, Integer, Long, BingInteger 등 정수 표현 가능 |
%s | 객체의 문자열 데이터에 사용 해당 객체의 toString() 메소드의 결과가 출력 |
%t | 날짜형 데이터에 사용 부가적인 옵션이 필요하고 Date, Calendar 클래스에 사용 |
%n | 개행처리에 사용. 대응되는 매개변수 값이 없어도 사용 가능 |
%% | % 문자 출력에 사용 대응되는 매개변수 값이 없어도 사용 가능 |
2. 인자 순서$
인자 순서는 아규먼트(argument)의 치환 순서를 지정하는 것입니다.
1$ 는 첫 번째, 2$는 두 번째, 3$ 는 세 번째 아규먼트(argument)를 의미합니다.
예를 들어 System.out.printf(“%2$d + %1$d 은 %3$d 입니다%3$d입니다.”, 10, 20, 30); 입력했다면
%2$d 에는 두 번째 아규먼트 20, %1$d 에는 첫 번째 아규먼트인 10, %3$d 에는 세 번째 아규먼트인 30 이 치환되어 "20 + 10 = 30입니다."라는 결괏값이 나타날 것입니다.
3. 플래그
플래그는 부가적인 정보를 표시하기 위해 사용됩니다.
데이터를 왼쪽으로 정렬한다던가(기본으로 오른쪽 정렬), 금액을 표현할 때와 같이 일정 자릿수마다 구분 문자를 표시하는 등의 옵션을 설정하고 싶을 때 이용할 수 있습니다.
예를 들어 System.out.printf(“% d + % d 은 %+d입니다.”, 10, 20, 30); 를 입력했다면
"20 + 10 = +30입니다."라는 결괏값이 나타날 것입니다.
4. 너비와 정밀도
너비는 데이터를 표현할 때 얼마 정도의 공간을 차지할 것인지를 지정하는 것이고
정밀도는 소수점 아래의 값을 몇 자리까지 표현할 것인지를 나타냅니다. (정밀도는 '. 숫자' 형태로 표시합니다.)
예를 들어 %5d는 5개의 문자를 표시할 만큼의 공간이 확보하게 되고 %5.2f는 5개의 문자를 표시할 만큼의 공간을 확보하고 그중에서 2자리는 소수점 이하의 값을 표현하는 데 사용됩니다.
System.out.printf(“파이=%5.2f”, Math.PI); 를 입력했다면 "파이=3.14"라는 결괏값이 나타날 것입니다.
(5자리를 표시할 수 있는 공간을 확보했지만 아규먼트(argument)의 정수 값이 3 이므로 남은 2자리는 사용하지 않게 됩니다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import java.util.*;
public class FormatTest {
public static void main(String[] args) {
System.out.printf("%d + %d = %d 입니다. %n", 10, 20, 30);
System.out.printf("%2$s의 위도는 %1$6.4f 입니다. %n", 37.5306, "서울");
System.out.printf("%+d %n", 10);
System.out.printf("%+d %n", -10);
System.out.printf("가격:%,d원 %n", 10000000);
Calendar now = new GregorianCalendar();
System.out.printf("%1$tY/%1$tm/%1$td %1$tH:%1$tM:%1$tS %n", now);
System.out.printf("%1$tY년%1$tm월%1$td일 %1$tp %1$tH시%1$tM분%1$tS초 %n", now);
System.out.printf(Locale.US, "%tc %n", now);
}
}
|
cs |
<실행결과>
10 + 20 = 30 입니다. 서울의 위도는 37.5306 입니다. +10 -10 가격:10,000,000원 2015/02/19 18:15:37 2015년02월19일 오후 18시15분37초 Thu Feb 19 18:15:37 KST 2015 |
'개발자였던 것 > JAVA 기초' 카테고리의 다른 글
참조 타입과 참조 변수 (0) | 2020.05.10 |
---|---|
클래스의 구성 (0) | 2020.03.24 |
배열 (0) | 2020.03.08 |
조건문 (0) | 2020.03.07 |
문자의 입력과 출력-Scanner (0) | 2020.03.06 |