Java는 C ++를 기반으로 개발되었지만 C ++의 많은 단점을 개선했습니다. 언급해야 할 사항 중 하나는 줄입니다. 학습이 심화되면 MFC에 들어갈 때 문자열이나 문자를 처리 할 때 _T () 매크로를 사용하여 문자 나 문자열을 유니 코드 유형으로 바꾸어야한다는 것을 알고 있습니다. 그렇지 않으면 처리 중에 버그가 발생합니다. Java에서는 문자 클래스에 저장된 문자 숯 또는 문자는 하나의 바이트가 아니라 2 바이트입니다. 유니 코드는 세계의 모든 문자를 지원하는 데 사용됩니다.
문자 순서는 문자열을 형성하고 두 가지 유형의 문자열이 있습니다. 하나는 문자열 상수라고하는 생성 후 수정할 필요가없는 문자열 상수입니다. Java에서는 String 클래스를 사용하여 저장됩니다.
하나는 문자열 변수라고하는 생성 후 수정 해야하는 문자열 변수입니다. Java에서는 StringBuffer 클래스를 사용하여 작동 및 관리됩니다.
StringBuffer 클래스
1. StringBuffer 클래스 객체를 만듭니다
StringBuffer 클래스 객체는 문자열 변수를 나타냅니다 ( "변수"). 각 StringBuffer 클래스 객체는 확장 및 수정할 수있는 문자열 변수입니다. 다음은 일반적으로 사용되는 StringBuffer 클래스 생성자입니다.
(1) 공개 StringBuffer ()
용량의 초기 값이 16 자로 설정된 StringBuffer 클래스의 새 빈 개체를 만듭니다 (16 자 임)
(2) 공개 StringBuffer (int length)
용량 초기 값이 길이 문자로 설정된 새 빈 StringBuffer 객체를 만듭니다.
(3) 공개 StringBuffer (String Str)
컨텐츠의 내용 인 새 StringBuffer 객체를 작성하고 용량은 STR 길이로 설정되어 16자를 추가합니다 (참고 : 16 자 추가)
2. StringBuffer 클래스 객체의 일반적인 방법
(1) StringBuffer 클래스 객체의 확장
StringBuffer 클래스는 StringBuffer 객체에 포함 된 문자를 확장하기위한 두 가지 메소드 세트를 제공합니다.
1) 공개 StringBuffer Append
(Object OBJ)
Append 메소드는 StringBuffer 객체에 포함 된 문자를 확장하는 데 사용됩니다. 지정된 매개 변수 객체를 문자열로 변환 한 후 원래 StringBuffer 객체 뒤에 추가되고 새 StringBuffer 객체를 반환합니다. 추가 매개 변수 개체는 int, char, string, double 등과 같은 다양한 데이터 유형 일 수 있습니다.
2) 공개 StringBuffer 인서트 (
int 삽입 위치 오프셋, 매개 변수 개체 유형, 매개 변수 개체 이름)
이 메소드는 지정된 매개 변수 객체를 문자열로 변환하고 원래 StringBuffer 객체의 지정된 위치에 삽입하고 새 StringBuffer 객체를 반환합니다.
(2) StringBuffer 클래스 객체의 길이와 용량
StringBuffer 클래스 객체의 길이는 포함 된 문자 수를 나타냅니다. 용량은 할당 된 문자 공간의 수를 나타냅니다.
1) 공개 int 길이 ()
이 메소드는 현재 StringBuffer 클래스 객체에 포함 된 문자 수를 반환합니다.
2) 공개 INT 용량 ()
이 메소드는 현재 StringBuffer 클래스 객체에 의해 할당 된 문자 공간 수를 반환합니다.
(3) StringBuffer 클래스 객체의 수정
공개 void setCharat (intindex, chearch)
이 메소드는 현재 StringBuffer 객체의 인덱스 위치에서 문자를 지정된 문자 ch로 대체합니다.
(4) 현의 할당 및 추가
문자열은 프로그램에서 자주 사용되는 데이터 유형입니다. 문자열의 할당 및 추가는 Java 컴파일 시스템에 소개됩니다.
(5) 다른 방법은 문자열 클래스와 유사합니다.
3. StringTokenizer 클래스를 사용하여 문자열을 분해하십시오
StringTokenizer 클래스는 java.util 패키지에 있으며이 클래스를 사용할 때 프로그램의 시작 부분에 추가됩니다.
importjava.util.stringtokenizer 또는
importjava.util.*
StringTokenizer 클래스
StringTokenizer 클래스의 경우 주요 기능은 주어진 분할 문자에 따라 문자열을 분할하는 것입니다. 그 기능은 문자열 클래스의 분할 방법과 유사합니다.
1. StringTokenizer 클래스의 생성자
(1) StringTokenizer (stringstr)
Delimiter가 "/t/n/r/f"로 설정된 주어진 문자열 str에 대한 StringTokenizer 객체를 만듭니다.
(2) StringTokenizer (String Str, String delim)
Delimiter가 지정된 String Delim이고 기본적으로 구분 기호를 포함하지 않는 StringTokenizer 객체를 작성하십시오.
3) StringTokenizer (String Str, String Delim, Boolean ReturnDelims)
지정된 문자열 Delim 인 Delimiter가 지정된 문자열 str에 대한 StringTokenizer 객체를 만듭니다. ReturnDelims가 true 인 경우 생성 된 StringTokenizer 객체의 각 문자열에는 구분 기가 포함되어 있으므로 구분 기가 포함되지 않습니다.
2. StringTokenizer 클래스의 일반적인 방법
Nintcounttokens ()
분할 후 StringTokenizer 객체의 하위 문자열 수를 반환합니다.
nbooleanhasmoreElements ()
이 방법의 기능은 hasmoretokens () 메소드의 기능과 동일합니다.
nbooleanhasmoretokens ()
StringTokenizer 객체에 분할 된 기판이 포함되어 있는지 여부를 감지하십시오. 그렇다면 true가 반환됩니다. 그렇지 않으면 False가 반환됩니다.
ObjectNextElement ()
이 방법은 NextToken ()과 동일한 기능을 갖습니다. 주요 차이점은 문자열 객체가 아니라 객체 객체를 반환한다는 것입니다.
stringnextToken ()
StringTokenizer 객체에서 다음 분할 하위 문자를 반환하십시오
stringnexttoken (String delim)
StringTokenizer 객체에서 다음 분할 하부 문자열을 반환하지만 Delimiter는 Delim으로 재설정됩니다.
NIN 사실, C와 같은 일부 프로그래밍 언어에서 문자열은 문자 배열로 구성되며 각 문자열의 끝은 "/0"으로 표시되지만 Java에서는 그렇지 않습니다.
Nin Java, 문자열은 일반적으로 다음과 같은 문자열 클래스의 객체로 존재합니다. 대상입니다.
따라서 Java의 문자열과 문자 어레이는 완전히 다르며 C의 문자열과도 다릅니다!
문자열과 문자 배열의 변환을 용이하게하기 위해 Nin Order, 이러한 생성자와 방법은 문자열 클래스에 제공됩니다.
생성자 문자열과 같은 n (char [] 값)
n 메소드 tochararray ()
메소드 가치 (char [] 데이터)
끊임없는 수영장
소스 프로그램에 나타나는 문자열 상수의 경우 프로그램이 실행되면 캐시의 일정한 풀에 저장됩니다.
일정한 풀에 캐시 된이 문자열을 참조하는 변수를 비교하면 ==로 올바른 결과를 얻을 수 있습니다.
그러나 런타임에 +, 서브 스트링 등과 같은 문자열에 대한 다양한 작업이 새로운 문자열 객체를 생성합니다.
그러나 강력한 컴파일러는 s3 = "hell" + "o"와 같은 스트링 상수의 스티치를 최적화 할 것입니다. 그러나 가변 작업의 경우 S1 + S2와 같은 가상 머신이 수행하고 결과가 이미 일정한 풀에 있는지 여부를 결정하는 것은 불가능합니다. 따라서 == 대신 평등을 사용하여 두 줄이 동일한지 확인하십시오.
public static void main (String [] args) {// 문자열 상수는 일정한 풀에 넣습니다. 문자열 s1 = "hello"; 문자열 s2 = "hello"; 문자열 s3 = "hell" + "o"; System.out.println (S1 == S2); System.out.println (S1 == S3); // string의 substring like +like +like warke new를 만듭니다. 문자열 s4 = "지옥"; 문자열 S5 = S4 + "O"; System.out.println (S1 == S5); System.out.println (s1.equals (s5)); // 서브 스트링은 서브 스트링 (0) 문자열 s6 = s1.substring (0)에 특수 핸들이 있습니다. System.out.println (S1 == S6); }S1, S2, S3의 바이트 코드를 테스트하십시오.
0 : LDC #16; // 문자열 안녕하세요
2 : Store_1
3 : LDC #16; // 문자열 안녕하세요
5 : Store_2
6 : LDC #16; // 문자열 안녕하세요
8 : Store_3
S4 및 S5의 바이트 코드를 테스트하십시오.
41 : LDC #30; // 지옥을 끈
43 : 저장 4
45 : 새로운 #32; // 클래스 Java/Lang/StringBuilder
48 : DUP
49 : 알로드 4
51 : Invokestatic #34; // 메소드 java/lang/string.valueof : (ljava/lang/object;) ljava/lang/string;
54 : Invokescial #40; // 메소드 java/lang/stringbuilder. "<init>":( ljava/lang/string;) v
57 : LDC #43; // 문자열 o
59 : InvokeVirtual #45; // 메소드 java/lang/stringbuilder.append : (ljava/lang/string;) ljava/lang/stringbuilder;
62 : InvokeVirtual #49; // 메소드 java/lang/stringbuilder.tostring :() ljava/lang/string;
서브 스트링 방법, 서브 스트링 (0,3)은 문자 0에서 2에서 2로 가져 오는 문자열입니다.이 설계의 이유는 기판의 길이를 쉽게 계산하기 쉽기 때문일 수 있습니다. 3-0 = 3. 동시에, Substring은 특수 매개 변수에 대한 특수 최적화 처리를 가지고 있습니다.
public string substring (int beginindex, int endindex) {if (beginIndex <0) {새 stringIndexOutOfBoundSexception (beginIndex); } if (endIndex> count) {새 stringIndExOutOfBoundSexception (endIndex); } if (beginIndex> endIndex) {새 stringIndexOutOfBoundSexception (endIndex -beginIndex); } return ((beginindex == 0) && (endIndex == count))? 이것 : 새 문자열 (Offset + beginIndex, endIndex -beginIndex, value); } 이것으로부터 우리는 문자열 객체 뒤에 마법이 없다는 것을 알 수 있으며, 바이트 코드를 이해하면 더 잘 이해할 수 있습니다.
실제로, 클래스 및 방법에 대한 많은 정보는 패키지 이름, 클래스 이름, 메소드 서명 등과 같은 상수 풀에 저장됩니다. 관심이 있으시면 심층적 인 연구를 수행 할 수 있습니다.