개발자였던 것/JAVA 기초

자바 문자열 함수/ length(), length, equals(), format()

서으이 2020. 4. 3. 17:35
728x90
반응형

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  
5

 

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  
BMW  
Ford  
Mazda

여기서 중요한 점은 빈칸인(띄어쓰기) 또한 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"102030);
        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
728x90
반응형