문자열 포맷 

 

String 클래스의 format 메서드 사용.

 

%s : 문자열 들어감.

%d : 수치 들어감.

%10s : 문자열 오른쪽 정렬, 10자리 채우고 남는 자리에는 공백 채워짐.

%-10s : 문자열 왼쪽으로 정렬, 10자리 채우고 남는 자리에는 공백 채워짐.

 

 

수치 포맷

 

DecimalFormat 클래스 사용.

 

0 : 수치 들어감. (설정한 자릿수 남으면 0으로 채워짐.)

# : 수치 들어감. (설정한 자릿수 남아도 채워지지 않음.)

, : 해당 위치에 콤마가 그대로 들어감.

. : 해당 위치에 도트가 그대로 들어감.

 

문자열 포맷과 수치 포맷 예제

 

  Detail detail1 = new Detail();
  detail1.setItemName("쌀5kg");
  detail1.setAmount(new BigDecimal(15000));

  .

  .

  .

  // 구매 내역 문자열 서식 정의
  String lineBase = "%-10s%10s원"; // 포맷 문자 수정
  
  // 금액 표시용 서식 정의
  DecimalFormat df = new DecimalFormat("###,##0"); // 추가
  
  // 금액을 표시용으로 가공
  String dispAmount1 = df.format(detail1.getAmount().longValue());
  String dispAmount2 = df.format(detail2.getAmount().longValue());
  
  // 변환한 금액을 표시하도록 수정
  String result1 = String.format(lineBase, detail1.getItemName(), dispAmount1);
  String result2 = String.format(lineBase, detail2.getItemName(), dispAmount2);

 

'Java' 카테고리의 다른 글

문자열 연결은 StringBuilder 사용  (0) 2018.08.12

String 클래스는 변하지 않는 클래스

 

String 클래스는 new를 사용하지 않고도 인스턴스화가 가능하다.

때문에 일반적으로 String 객체를 생성하기 위해서는 다음과 같이 작성한다.

 

  String text = "String 클래스입니다.";

 

물론 다른 클래스처럼 new 연산자도 가능하지만 의미도 없고 이중으로 인스턴스를 만들기 때문에 낭비.

 

  String text = new String("String 클래스입니다."); 

 

한 가지 주의할 점은 String 클래스는 인스턴스의 데이터가 변하지 않는 불변(immutable) 클래스라는 점.

String 형 데이터의 값을 변경하면 인스턴스의 문자열 데이터가 변하는 것이 아니라 인스턴스를 새로 생성한다.

 

 

StringBuilder 클래스의 사용

 

때문에 문자열을 연결할 때는 StringBuilder 클래스를 사용하는 것이다.

 

  String text1 = "나는";

  String text2 = "7수다.";

  text1 = text1 + text2;

 

위 코드를 실행했을 때 프로그램 내부에서는 text1과 text2 그리고 결합 후의 text1이라는 3개의 String 인스턴스가 생성된다.

원래의 text1 인스턴스는 보이지 않는 상태이지만 여전히 메모리상에 존재한다. 루프 안에서 문자열을 연결하는 경우라면 반복되는 동안 계속 인스턴스를 생성하게 된다. (물론 가비지 컬렉션이 자동으로 메모리를 관리해주겠지만 낭비되는 메모리가 없도록 프로그램을 작성하자.)

 

다음과 같이 StringBuilder 클래스의 append 메서드로 문자열을 연결하면 인스턴스가 계속 생성되지 않는다. 

 

  String text1 = "나는";
  String text2 = "7ㅏ수다.";
  
  StringBuilder sb = new StringBuilder();
  sb.append(text1);
  sb.append(" ");
  sb.append(text2);
  
  String result = sb.toString();

 

'Java' 카테고리의 다른 글

문자열, 수치 포맷  (0) 2018.08.16

+ Recent posts