부문자열(Substrings)
String 클래스의 substring 메소드를 이용하여 문자열에서 부문자열을 유출해 낼 수 있다.
예를 들면,
String greeting = “Hello”;
String s = greeting.substring(0, 4);
위의 코드는 “Hell” 문자열을 생성한다. 자바에서는 C 나 C++에서처럼 특별한 방식으로 문자
열을 셀 수 있다. 문자열에서 첫번째 문자의 위치는 0 이다.(C 에서는 위치를 계산할 때 0 부터
시작해야 하는 기술적 문제가 있지만, 자바에서는 그런 것은 아니다.)
예를 들면, 문자열 “Hello”에서 문자 ‘H’의 위치는 0 이며, 문자 ‘o’의 위치는 4 이다.
substring 의 두번째 인자는 복사가 되지 않는 첫번째 위치를 나타낸다. 위의 경우에는 위치
가 0, 1, 2, 3(0 부터 3 까지, 0과 3 을 포함하여)인 문자를 복사한다. substring 에서는 위치 0 을
포함하고 4 를 제외하여 이것을 계산한다.
문자열 편집
문자열의 길이를 알기 위해서는 length 메소드를 사용한다. 예를 들면,
String greeting = “Hello”;
int n = greeting.length(); // is 5.
char 이 유니코드 문자를 나타내듯이 String 또한 일련의 유니코드 문자를 나타낸다. 문자열
에서 각 문자를 접근할 수 있다. 예를 들면, s.charAt(n)은 위치가 n 인 유니코드 문자를 반
환한다. 여기서 n 은 0 부터 s.length() – 1 의 값이 된다.
문자열의 동등(equality)에 대한 검사
두개의 문자열이 동일한지 검사하기 위해서는 equals 메소드를 사용한다.
s.equals(t)
위에서 문자열 s 와 t 가 동일하다면 true 가 반환되며, 동일하지 않으면 false 가 반환된다.
equals 메소드의 s 와 t 는 문자열 변수이거나 문자열 상수가 될 수 있다. 예를 들면,
“Hello”.equals(command)
는 올바른 코드이다. 대소 문자 구별없이 두 문자열이 동일한지 검사할 경우 equalsIgnoreCase
메소드를 사용하라.
“Hello”.equalsIgnoreCase(“hello”)
두개의 문자열이 동일한지 검사하기 위해 == 연산자를 사용하지 말아라. 이것은 단지 그 문자
열이 같은 장소에 저장되어 있는지 만을 검사한다. 물론 문자열이 같은 장소에 저장되어 있다
면, 이것들은 동일하여야 한다. 하지만 똑같은 문자열을 다른 장소에 여러 개의 복사본으로 저
장할 수 있다.
String greeting = “Hello”; // initialize greeting to a string
if (greeting == “Hello”) … // probably true
if (greeting.substring(0, 4) == “Hell”) … // probably false
java.lang.String
l char charAt(int index)
지정된 위치의 문자를 반환한다.
l int compareTo(String other)
사전 순서로 other 전에 해당 문자열이 나오면 음수를 반환하고 사전 순서로 other 다
음에 해당 문자열이 나오면 양수를 반환한다. 만일 두 문자열이 동일하면 0 을 반환한다.
l boolean endsWith(String suffix)
만일 해당 suffix 로 문자열이 끝나면 true 를 반환한다.
l boolean equals(Object other)
만일 문자열이 other 와 동일하면 true 를 반환한다.
l boolean equalsIgnoreCase(String other)
대소 문자 구별을 하지 않고 other 와 문자열이 동일하면 true 를 반환한다.
l int indexOf(String str)
l int indexOf(String str , int fromIndex)
str 과 동일한 첫번째 부문자열의 시작 지점을 반환한다. 인덱스는 0 이나 fromIndex 에
서 시작한다.
l int lastIndexOf(String str)
l int lastIndexOf(String str, int fromIndex)
str 과 동일한 마지막 부문자열의 시작 지점을 반환한다. 인덱스는 0 이나 fromIndex 에
서 시작한다.
l int length()
문자열의 길이를 반환한다.
l String replace(char oldChar , char newChar)
NewChar 문자열
l boolean startsWith(String prefix)
만일 해당 suffix 로 문자열이 시작하면 true 를 반환한다.
l String substring(int beginIndex)
l String substring(int beginIndex , int endIndex)
beginIndex 에서 부터 문자열의 끝이나 endIndex 까지 본래의 문자열내의 포함되어 있
는 모든 문자열을 새로운 문자열로 반환한다.
l String toLowerCase()
문자열내의 모든 문자를 소문자로 변환한 새로운 문자열을 반환한다.
l String toUpperCase()
문자열내의 모든 문자를 대문자로 변환한 새로운 문자열을 반환한다.
l String trim()
본래의 문자열내에 공백 문자들을 모두 제거한 새로운 문자열을 반환한다.
//키보드 입력방법
import corejava.*;
class StringPromptSample
{ public static void main(String[] args)
{ String yourname;
yourname = Console.readString
(“Please enter your name.”);
System.out.println(“Hello “ + yourname);
}
}
3,333.333
$3,333.33
333,333%
여러분이 보듯이, 형식자는 천단위와 통화 기호($) , 퍼센트 사인을 구별하기 위해 컴마를 추가
한다.
기본 로케일에 대한 형식자를 얻으려면 다음 세 개의 메소드중에 하나를 사용하라.
NumberFormat.getNumberInstance()
NumberFormat.getCurrencyInstance()
NumberFormat.getPercentInstance()
이 들 메소드들은 각기 NumberFormat 형의 객체를 반환하다. 여러분은 하나 또는 그 이상의 숫
자들을 포맷하기 위해 해당 객체(NumberFormat )를 사용할 수 있다. 그 다음 포맷된 숫자를 포
함하는 문자열을 얻기 위해 NumberFormat 객체에 format 메소드를 적용한다. 일단 포맷된 문자
열을 얻게 되면 해당 문자열을 출력함으로서 손쉽게 포맷된 숫자를 표현할 수 있다.
double x = 10000.0 / 3.0;
NumberFormat nf = NumberFormat.getNumberInstance();
String fx = nf.format(x); // the string “3,333.33”
System.out.println(fx);
작업을 NumberFormat 클래스내의 setMinimumIntegerDigits, setMinimumFractionDigits,
setMaximumIntegerDigits , setMaximumFractionDigits 메소드들을 사용하여 할 수 있다. 예를 들면,
double x = 10000.0 / 3.0;
NumberFormat nf = NumberFormat.getNumberInstance();
nf. setMaximumFractionDigits(4);
nf. setMinimumIntegerDigits(6);
String fx = nf.format(x); // the string “003,333.3333”
여러분이 받아들이고자 하는 숫자 형식을 알려주는 DecimalFormat 객체를 정의해야 한다.
여러분은 포맷 문자열(format string)에 여러분이 원하는 포맷 요구사항을 지정할 수 있다. 가령,
DecimalFormat df = new DecimalFormat(“0.####”);
System.out.println(df. format(x));
위의 코드는 다음 형식의 숫자를 출력해 낸다.
3333.333333
심볼 의미
———————————————————————-
0 숫자
# 숫자; 0 으로 리딩(Leading, 예 0.12) 또는 트레일딩되면 보여지지 않는다.
. 소수점 구분 위치
, 그룹 분리 위치( 예, 천단위 구분)
; 양수와 음수를 위한 분리 포맷
– 음수를 표시하는 선표기
% 100 으로 나눈 후 퍼센트로 보여준다.
다른 심볼 출력 문자열내에 심볼로 포함된다.
———————————————————————-
———————————————————————-
,##0.00 1,234.50 2 자리 소수점, 0 트레일링
컴마로 천단위 숫자 구분
만일 숫자가 1 보다 작으면 0 으로 리딩(예, 0.123)
$,##0.00;($,##0.00) ($1,234.50) 음수의 경우 마이너스(-) 기호를 사용하는 것 대신
괄호를 사용하여 표현하고 $ 심볼을 추가한다.
0.###### 1234.5 –1 에서 1 사이의 숫자일 경우 , 0 로 리딩(예, 0.123)
0 트레일링은 보이지 않는다.
———————————————————————-
java.text.NumberFormat
l static NumberFormat getCurrencyInstance()
현재의 로케일을 사용하여 현재의 통화 값을 문자열로 변환하기 위한 NumberFormat 객체
를 반환한다.
l static NumberFormat getNumberInstance()
현재의 로케일을 사용하여 숫자들을 포맷하기 위한 NumberFormat 객체를 반환한다.
l static NumberFormat getPercentInstance()
퍼센트를 문자열로 변환하기 위한 NumberFormat 객체를 반환한다.
l void setMaximumFractionDigits(int digits)
전달인자: digits 출력할 숫자 수
포맷 객체에 대해 소수점 이하 부분의 숫자들의 최대 수를 설정한다. 최종 출력된 숫자는
반올림된다.
l void setMaximumIntegerDigits(int digits)
전달인자: digits 출력할 숫자 수
포맷 객체에 대해 소수점 이상 부분의 숫자들의 최대 수를 설정한다. 아주 신중하게 이 메
소드를 사용하라! 만일 너무 적은 숫자를 설정하면 숫자는 트렁크되어 잘못된 결과를 출력
할 것이다.
l void setMinimumFractionDigits(int digits)
전달인자: digits 출력할 숫자 수
포맷 객체에 대해 소수점 이하 부분의 숫자들의 최소 수를 설정한다. 만일 숫자의 소수점
부분이 지정된 최소 수 보다 작으면 0 트레일링이 지원된다.
l void setMimimumIntegerDigits(int digits)
전달인자: digits 출력할 숫자 수
포맷 객체에 대해 소수점 이상 부분의 숫자들의 최소 수를 설정한다. 만일 숫자의 소수점
이상(실수) 부분이 지정된 최소 수 보다 작으면 0 리딩이 지원된다.
java.text.DecimalFormat
l void DecimalFormat(String pattern)
전달인자 : pattern 포맷 문자열
숫자들을 문자열로 변환하기 위해 제공된 패턴(표 3-5)에 대한 DecimalFormat 객체를 반환한
다.