이 기사에서는 Java의 문자열에 관한 가장 일반적인 10가지 질문을 소개합니다.
1. 문자열 비교를 위해 "==" 또는 equals()를 사용해야 합니까?
간단히 말해서 "=="는 두 참조가 동일한 메모리 주소(동일한 물리적 개체)를 참조하는지 여부를 결정합니다.
그리고 같음은 두 문자열의 값이 같은지 여부를 결정합니다.
두 문자열 참조가 동일한 객체인지 확인하려는 경우가 아니면 항상 equals() 메서드를 사용해야 합니다.
문자열 인턴을 이해하면 이 문제를 더 잘 이해할 수 있습니다.
2. 민감한 정보의 경우 String보다 char[]를 사용하는 것이 더 나은 이유는 무엇입니까?
String은 불변 객체입니다. 즉, 일단 생성되면 전체 객체를 변경할 수 없습니다. 초보자가 String 참조가 변경되었다고 생각하더라도 실제로는 다른(새) 객체를 가리키는 (포인터) 참조일 뿐입니다.
프로그래머는 문자 배열을 명시적으로 수정할 수 있으므로 민감한 정보(예: 비밀번호)가 다른 곳에서 쉽게 노출되지 않습니다(사용 후 char[]를 0으로 설정하는 한).
3. 스위치 문에서 문자열을 케이스 조건으로 사용하시겠습니까?
JDK7부터는 가능합니다. 그런데 Java 6 및 이전 버전에서는 이를 지원하지 않습니다.
다음과 같이 코드 코드를 복사합니다.
// Java 7 이상에서만 유효합니다!
스위치(str.toLowerCase()) {
사례 "a":
값 = 1;
부서지다;
사례 "b":
값 = 2;
부서지다;
}
4. 문자열을 숫자로 변환
매우 큰 숫자의 경우 Long을 사용하세요. 코드는 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다.
int age = Integer.parseInt("10");
long id = Long.parseLong("190"); // 값이 클 수 있는 경우.
5. 문자열을 공백 문자로 분할하는 방법
String의 Split() 메소드에 의해 수신된 문자열은 정규식으로 구문 분석됩니다.
"/s"는 공백 " ", 탭 "/t", 줄 바꿈 "/n", 캐리지 리턴 "/r"과 같은 공백 문자를 나타냅니다.
컴파일러는 소스 코드를 구문 분석할 때 리터럴 트랜스코딩도 수행하므로 "//s"가 필요합니다.
다음과 같이 코드 코드를 복사합니다.
String[] strArray = aString.split("//s+");
6. substring() 메소드는 내부적으로 어떻게 처리되나요?
JDK6에서 substring() 메서드는 여전히 원래 char[] 배열을 공유하고 오프셋과 길이를 통해 "새" 문자열을 구성합니다.
substring()을 통해 새로 생성된 객체를 얻으려면 다음 방법을 사용하십시오.
다음과 같이 코드 코드를 복사합니다.
String sub = str.substring(start, end) + "";
물론 Java 7에서는 substring()이 공유하는 대신 새로운 char[] 배열을 생성합니다.
자세한 내용은 substring() 메서드 및 JDK6과 JDK7의 차이점을 참조하세요.
7. 문자열 대 StringBuilder 대 StringBuffer
StringBuilder는 변경 가능하므로 생성 후 내부 값을 수정할 수 있습니다.
StringBuffer는 동기화되므로 스레드로부터 안전하지만 상대적으로 효율성이 떨어집니다.
8. 같은 문자열을 반복적으로 연결하는 방법은 무엇입니까?
옵션 1: Apache Commons Lang 라이브러리의 StringUtils 유틸리티 클래스를 사용합니다.
다음과 같이 코드 코드를 복사합니다.
문자열 str = "abcd";
반복되는 문자열 = StringUtils.repeat(str,3);//abcdabcdabcd
옵션 2:
더 유연하게 StringBuilder 생성자를 사용하세요.
다음과 같이 코드 코드를 복사합니다.
문자열 src = "이름";
int len = src.length();
int 반복 = 5;
StringBuilder builder = new StringBuilder(len * 반복);
for(int i=0; i<반복; i++){
builder.append(src);
}
문자열 dst = builder.toString();
9. 문자열을 날짜로 변환하는 방법은 무엇입니까?
다음과 같이 코드 코드를 복사합니다.
SimpleDateFormat 형식 = new SimpleDateFormat("yyyy-MM-dd");
문자열 str = "2013-11-07";
날짜 날짜 = format.parse(str);
System.out.println(format.format(날짜));//2013-11-07
10. 특정 캐릭터가 등장하는 횟수는 어떻게 계산하나요?
또한 Apache Commons Lang 라이브러리 StringUtils 클래스를 사용합니다.
다음과 같이 코드 코드를 복사합니다.
int n = StringUtils.countMatches("11112222", "1");
System.out.println(n);