>  기사  >  Java  >  자바 문자열 고급

자바 문자열 고급

巴扎黑
巴扎黑원래의
2017-06-26 11:29:461239검색

Java String Advanced

머리말

문자열 작업에 가장 일반적으로 사용되는 세 가지 클래스, 즉 String, StringBuilder 및 StringBuffer가 있습니다. 이 세 가지 클래스는 아래에서 자세히 설명합니다...

String

String 클래스 이것은 문자열에 대한 가장 기본적인 클래스이기도 합니다.

Construction

  • new String(String str)<code>new String(String str)

  • new String(StringBuilder str)

  • new String(StringBuffer str)

  • new String(byte[] bys,String charsetName) 通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。

常用方法

  • str charAt(int index) 返回指定索引处的字符

  • String concat(String str) 将指定字符串str连接到此字符串的结尾,返回连接成功后的字符,因此需要接受才能有效果

  • boolean contains(CharSequence s) 判断此字符串是否包含指定的char值序列,这里的 CharSequence是一个接口,可以直接使用它的子类作为参数(String,StringBuffer,StringBuild)

  • static String copyValueOf(char[] c) 将字符数组变成字符串并且返回

  • static String copyValueOf(char[] c,int off,int count) 将截取的字符数组变成字符串并且返回,off是开始截取的下标,count是截取的个数

  • boolean endWith(String s) 判断字符串是否是以s结尾

  • boolean equals(Object o) 用于比较

  • int indexOf(char c) 返回字符c在字符串中第一次出现的索引

  • int indexOf(char c,int fromIndex) 从指定索引处开始搜索,查找第一次出现的索引

  • int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。

  • int indexOf(String str,int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。

  • boolean isEmpty()

  • int length()

  • boolean matches(String regex) 是否匹配正则表达式

  • trim() 返回字符串的副本,忽略前导空白和尾部空白。

  • String substring(int beginIndex) 返回一个新的字符串,它是此字符串的一个子字符串。

  • String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。

  • String toUpperCase() 使用默认语言环境的规则将此 String 中的所有字符都转换为大写。

  • String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。

  • String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串。

  • char[] toCharArray() 将此字符串转换为一个新的字符数组。

  • byte[] getBytes(Charset charset) 使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组

注意

  • 上面的new String(byte[] bys,String charsetName)这个构造方法很重要,它可以改变字符串的编码集(和byte[] getBytes(Charset charset))配合着使用,下面我们来看一个例子,代码如下:

/*         * InputStreamReader实现了将字节流FileInputStream转换为字符流,然后使用转换来的字节流创建高效流,从而实现高效的读写         *//*         * 编码集(我的eclipse编辑器默认的是utf-8         * 下面将中文字符串的编码集变为GBK写入a.txt文件,因为a.txt默认的是utf-8的因此这里在文件中显示的是乱码         * 然后我们读出来的还是GBK的,因为我们写入的是GBK编码集的,但是我的eclipse是utf-8的编码集,因此在控制台上输出的还是乱码         * new String(byte[] bys,String         * charsetName)使用这个构造方法将byte数组改变编码集并且转换为utf-8格式的,那么这次在控制台上输出的就不乱码了         */// 将GBK格式的中文写入a.txt文件File file = new File("src/a.txt");
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        String str = "中";byte[] by = str.getBytes("GBK"); // 将字符串改为GBK编码集fileOutputStream.write(by);
        fileOutputStream.close();        //从a.txt文件中读取中文FileInputStream fileInputStream = new FileInputStream(file);int len;byte[] bys = new byte[4];while ((len = fileInputStream.read(bys)) != -1) {
            System.out.println(new String(bys, "GBK"));
        }
        fileInputStream.close();

StringBuffer

线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。当然最重要的一点就是线程安全,我们可以从它的源码中可以看出,对于一些操作(append,insert

new String(StringBuilder str)
🎜new String(StringBuffer str) 🎜🎜🎜 new String(byte[] bys,String charsetName) 지정된 문자 세트를 사용하여 지정된 바이트 하위 배열을 디코딩하여 새 문자열을 생성합니다. 🎜🎜🎜일반적인 메서드🎜🎜🎜🎜🎜str charAt(int index) 지정된 인덱스에 있는 문자를 반환합니다.🎜🎜🎜문자열 연결 ( String str) 지정된 문자열 str을 이 문자열의 끝에 연결하고 연결에 성공한 후 문자를 반환하므로 이를 수락해야 유효합니다🎜🎜🎜boolean contain (CharSequence s) 이 문자열에 지정된 char 값 시퀀스가 ​​포함되어 있는지 확인합니다. 여기서 CharSequence는 인터페이스이며 해당 하위 클래스를 매개변수로 직접 사용할 수 있습니다(String, StringBuffer, StringBuild)🎜🎜🎜<code> static String copyValueOf(char[] c)는 문자 배열을 문자열로 바꾸고 🎜🎜🎜static String copyValueOf(char[] c,int off,int count)를 반환합니다. > will 차단된 문자 배열이 문자열로 변환되어 반환됩니다. off는 차단을 시작하는 첨자이고 count는 차단 횟수🎜🎜🎜boolean endWith(String s)를 결정합니다. 문자열이 s🎜🎜🎜boolean equals(Object o)로 끝나는지 여부는 비교🎜🎜🎜int indexOf(char c)에 사용됩니다. > 문자 c를 반환합니다. 문자열에서 처음 나타나는 인덱스🎜🎜🎜int indexOf(char c,int fromIndex) 지정된 인덱스부터 검색을 시작하여 해당 문자열의 인덱스를 찾습니다. 첫 번째 발생🎜🎜🎜int indexOf(String str) 이 문자열에서 지정된 하위 문자열이 처음 나타나는 인덱스를 반환합니다. 🎜🎜🎜int indexOf(String str,int fromIndex) 지정된 인덱스부터 시작하여 이 문자열에서 지정된 하위 문자열이 처음 나타나는 인덱스를 반환합니다. 🎜🎜🎜부울 isEmpty()
🎜🎜🎜int length()🎜🎜🎜 boolean match(String regex) 정규식 일치 여부 🎜🎜🎜trim() 선행 및 후행 공백을 무시하고 문자열의 복사본을 반환합니다. 🎜🎜🎜String substring(int BeginIndex) 이 문자열의 하위 문자열인 새 문자열을 반환합니다. 🎜🎜🎜String substring(int BeginIndex, int endIndex) 이 문자열의 하위 문자열인 새 문자열을 반환합니다. 🎜🎜🎜String toUpperCase() 기본 로케일 규칙을 사용하여 이 문자열의 모든 문자를 대문자로 변환합니다. 🎜🎜🎜String[] Split(String regex) 주어진 정규 표현식과 일치하는 항목을 기준으로 이 문자열을 분할합니다. 🎜🎜🎜String[] Split(String regex, int Limit) 주어진 정규식과 일치하는 문자열을 기준으로 이 문자열을 분할합니다. 🎜🎜🎜char[] toCharArray() 이 문자열을 새 문자 배열로 변환합니다. 🎜🎜🎜byte[] getBytes(Charset charset) 주어진 charset를 사용하여 이 Stringbyte로 인코딩합니다. code> 순서를 지정하고 결과를 새 바이트 배열에 저장합니다🎜🎜🎜Note🎜🎜🎜🎜🎜위의 새 String(byte[] bys,String charsetName) 구성 방법은 매우 중요합니다. 문자열의 인코딩 세트를 변경합니다(byte[] getBytes(Charset charset)와 함께 사용됨). 코드는 다음과 같습니다. 🎜🎜🎜<pre class="sourceCode java"> public synchronized StringBuffer append(Object obj) {super.append(String.valueOf(obj));return this; }public synchronized StringBuffer append(String str) {super.append(str);return this; } public synchronized StringBuffer delete(int start, int end) {super.delete(start, end);return this; }/** * @throws StringIndexOutOfBoundsException {@inheritDoc} * @since 1.2 */public synchronized StringBuffer deleteCharAt(int index) {super.deleteCharAt(index);return this; }</pre>🎜🎜 StringBuffer🎜 🎜🎜스레드로부터 안전한 변경 가능한 문자 시퀀스입니다. <code>String과 유사하지만 수정할 수 없는 문자열 버퍼입니다. 물론 가장 중요한 점은 스레드 안전성입니다. 소스 코드에서 일부 작업(append, insert..) 블록에 스레드 제어가 사용된다는 것을 알 수 있습니다. 멀티스레딩에서 사용하기에 적합한 동기화의 소스 코드는 다음과 같습니다. 🎜🎜🎜rrreee🎜

Construction

  • new StringBuffer(StringBuilder str)new StringBuffer(StringBuilder str)

  • new StringBuffer(String str)

常用的方法

  • StringBuffer append(str)将指定类型的str追加到此字符串的后面(String,char,char[],int,double,float,long,StringBuffer,StringBuilder)

  • StringBuffer insert(int offest,  str) 将指定类型的str插入到此序列中,offest表示开始插入的位置的索引,类型有 String,char,char[],int,double,float,long,StringBuffer,StringBuilder

  • String delete(int fromIndex,int endIndex) 移除此序列中的字符串并且返回新的缓冲字符串

  • StringBuffer reverse() 反转字符串

  • String substring(int start) 返回一个新的 String,它包含此字符序列当前所包含的字符子序列。

  • String substring(int start, int end) 返回一个新的 String,它包含此序列当前所包含的字符子序列。

  • StringBuffer deleteCharAt(int index) 移除此序列指定位置的 char。

  • int length() 长度

  • String toString() 返回此序列中数据的字符串表示形式。

StringBuilder

建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。但是这个类不是线程安全的,只适合单线程,如果使用多线程推荐使用StringBuffer,当然使用这个也行,不过需要自己实现同步

构造方法

  • new StringBuilder(String str)

常用方法

这个类的常用方法和StringBuffer

new StringBuffer(String str)🎜🎜 🎜일반적으로 사용되는 방법🎜🎜🎜🎜🎜StringBufferappend(str)이 문자열의 뒤에 지정된 유형의 str을 추가합니다(String, char, char[], int, double, float ,long,StringBuffer,StringBuilder)🎜🎜🎜StringBuffer insert(int offest, str) 지정된 유형의 str을 이 시퀀스에 삽입합니다. 오프셋은 시작 위치를 나타냅니다. 삽입 인덱스 유형은 String, char, char[], int, double, float, long, StringBuffer, StringBuilder🎜🎜🎜String delete(int fromIndex,int endIndex)입니다. 이 항목을 제거하세요. 시퀀스의 문자열은 새로운 버퍼 문자열을 반환합니다🎜🎜🎜StringBuffer reverse() 문자열 반전🎜🎜🎜String substring(int start) code> 현재 이 문자 시퀀스에 포함된 문자 하위 시퀀스를 포함하는 새 문자열을 반환합니다. 🎜🎜🎜<code>String substring(int start, int end) 현재 이 시퀀스에 포함된 문자 하위 시퀀스를 포함하는 새 문자열을 반환합니다. 🎜🎜🎜StringBuffer deleteCharAt(int index) 이 시퀀스의 지정된 위치에서 문자를 제거합니다. 🎜🎜🎜int length() 길이 🎜🎜🎜String toString() 이 시퀀스에 있는 데이터의 문자열 표현을 반환합니다. 🎜🎜

StringBuilder

🎜🎜이 클래스는 대부분의 구현에서 StringBuffer보다 빠르므로 우선적으로 사용하는 것이 좋습니다. 하지만 이 클래스는 스레드로부터 안전하지 않으며 단일 스레드에만 적합합니다. 멀티스레딩을 사용하는 경우 StringBuffer를 사용하는 것이 좋습니다. 물론 이것도 사용할 수 있지만 필요합니다. 동기화를 직접 구현하려면🎜🎜🎜🎜🎜🎜🎜new StringBuilder(String str)🎜🎜🎜공통 메소드🎜🎜🎜이 클래스의 공통 메소드는 다음과 같습니다. StringBuffer의 내용이므로 여기서는 더 이상 동일하지 않습니다. 위 내용을 참고하여 사용하시면 됩니다🎜🎜

위 내용은 자바 문자열 고급의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:Java 기본 - 다형성다음 기사:Java 기본 - 다형성