>  기사  >  Java  >  Java의 StringBuilder 문자열 유형의 연산 방법 및 API 배열

Java의 StringBuilder 문자열 유형의 연산 방법 및 API 배열

高洛峰
高洛峰원래의
2017-01-22 09:49:271223검색

0. StringBuilder 유형 소개
StringBuilder 유형은 StringBuilder 유형의 API와 기본적으로 동일합니다. 즉, StringBuilder는 스레드에 안전하지 않습니다. StringBuilder가 인스턴스화되면 일반적으로 기본적으로 용량 크기를 설정합니다. 이는 일반적으로 문자열 매개변수의 길이 + 16입니다. StringBuilder는 추상 클래스 AbstractStringBuilder를 상속하는데, 이 추상 클래스는 문자 배열을 이용하여 내부적으로 구현되며, 배열을 동적으로 확장할 수 있다. StringBuilder 클래스에서 제공하는 일반적으로 사용되는 메소드에는 추가, 삭제 등의 기본 기능을 구현할 수 있는append(), insert(), replacement(), deleteCharAt(), indexOf(), reverse(), toString() 및 기타 메소드가 있습니다. , 문자열 수정 및 쿼리.

package date0812.demo1;
 
public class Test3 {
 
  public static void main(String[] args) {
    StringBuilder stringBuilder = new StringBuilder("Eclipse");
    //添加
    stringBuilder = stringBuilder.append(" software");
    //容量
    int C = stringBuilder.capacity();
    //翻转
    stringBuilder= stringBuilder.reverse();
    System.out.println(C);
    System.out.println(stringBuilder);
  }
}

실행 결과:

23
erawtfos espilcE

StringBuilder의 메서드
가변적인 문자 시퀀스입니다. AbstractStringBuilder를 상속하고 CharSequence 인터페이스를 구현합니다.
StringBuffer도 AbstractStringBuilder에서 상속된 하위 클래스입니다. 그러나 StringBuilder와 StringBuffer는 서로 다르며 전자는 스레드로부터 안전하지 않고 후자는 스레드로부터 안전합니다.
StringBuilder와 CharSequence의 관계 다이어그램은 다음과 같습니다.

Java의 StringBuilder 문자열 유형의 연산 방법 및 API 배열

StringBuilder 메서드 목록:

StringBuilder()
StringBuilder(int capacity)
StringBuilder(CharSequence seq)
StringBuilder(String str)
 
StringBuilder   append(float f)
StringBuilder   append(double d)
StringBuilder   append(boolean b)
StringBuilder   append(int i)
StringBuilder   append(long l)
StringBuilder   append(char c)
StringBuilder   append(char[] chars)
StringBuilder   append(char[] str, int offset, int len)
StringBuilder   append(String str)
StringBuilder   append(Object obj)
StringBuilder   append(StringBuffer sb)
StringBuilder   append(CharSequence csq)
StringBuilder   append(CharSequence csq, int start, int end)
StringBuilder   appendCodePoint(int codePoint)
int   capacity()
char   charAt(int index)
int   codePointAt(int index)
int   codePointBefore(int index)
int   codePointCount(int start, int end)
StringBuilder   delete(int start, int end)
StringBuilder   deleteCharAt(int index)
void   ensureCapacity(int min)
void   getChars(int start, int end, char[] dst, int dstStart)
int   indexOf(String subString, int start)
int   indexOf(String string)
StringBuilder   insert(int offset, boolean b)
StringBuilder   insert(int offset, int i)
StringBuilder   insert(int offset, long l)
StringBuilder   insert(int offset, float f)
StringBuilder   insert(int offset, double d)
StringBuilder   insert(int offset, char c)
StringBuilder   insert(int offset, char[] ch)
StringBuilder   insert(int offset, char[] str, int strOffset, int strLen)
StringBuilder   insert(int offset, String str)
StringBuilder   insert(int offset, Object obj)
StringBuilder   insert(int offset, CharSequence s)
StringBuilder   insert(int offset, CharSequence s, int start, int end)
int   lastIndexOf(String string)
int   lastIndexOf(String subString, int start)
int   length()
int   offsetByCodePoints(int index, int codePointOffset)
StringBuilder   replace(int start, int end, String string)
StringBuilder   reverse()
void   setCharAt(int index, char ch)
void   setLength(int length)
CharSequence   subSequence(int start, int end)
String   substring(int start)
String   substring(int start, int end)
String   toString()
void   trimToSize()

AbstractStringBuilder와 StringBuilder의 소스코드가 너무 길어서 여기에는 소스코드를 나열하지 않겠습니다. 관심 있는 독자는 스스로 조사해 볼 수 있습니다.

2. StringBuilder의 API 테스트 코드
2.1 StringBuilder에 insert 관련 API
소스코드는 다음과 같습니다(StringBuilderInsertTest.java):

/**
 * StringBuilder 的insert()示例
 *
 * @author skywang
 */
import java.util.HashMap;
 
public class StringBuilderInsertTest {
 
  public static void main(String[] args) {
    testInsertAPIs() ;
  }
 
  /**
   * StringBuilder 的insert()示例
   */
  private static void testInsertAPIs() {
 
    System.out.println("-------------------------------- testInsertAPIs -------------------------------");
 
    StringBuilder sbuilder = new StringBuilder();
 
    // 在位置0处插入字符数组
    sbuilder.insert(0, new char[]{'a','b','c','d','e'});
    // 在位置0处插入字符数组。0表示字符数组起始位置,3表示长度
    sbuilder.insert(0, new char[]{'A','B','C','D','E'}, 0, 3);
    // 在位置0处插入float
    sbuilder.insert(0, 1.414f);
    // 在位置0处插入double
    sbuilder.insert(0, 3.14159d);
    // 在位置0处插入boolean
    sbuilder.insert(0, true);
    // 在位置0处插入char
    sbuilder.insert(0, '\n');
    // 在位置0处插入int
    sbuilder.insert(0, 100);
    // 在位置0处插入long
    sbuilder.insert(0, 12345L);
    // 在位置0处插入StringBuilder对象
    sbuilder.insert(0, new StringBuilder("StringBuilder"));
    // 在位置0处插入StringBuilder对象。6表示被在位置0处插入对象的起始位置(包括),13是结束位置(不包括)
    sbuilder.insert(0, new StringBuilder("STRINGBUILDER"), 6, 13);
    // 在位置0处插入StringBuffer对象。
    sbuilder.insert(0, new StringBuffer("StringBuffer"));
    // 在位置0处插入StringBuffer对象。6表示被在位置0处插入对象的起始位置(包括),12是结束位置(不包括)
    sbuilder.insert(0, new StringBuffer("STRINGBUFFER"), 6, 12);
    // 在位置0处插入String对象。
    sbuilder.insert(0, "String");
    // 在位置0处插入String对象。1表示被在位置0处插入对象的起始位置(包括),6是结束位置(不包括)
    sbuilder.insert(0, "0123456789", 1, 6);
    sbuilder.insert(0, '\n');
 
    // 在位置0处插入Object对象。此处以HashMap为例
    HashMap map = new HashMap();
    map.put("1", "one");
    map.put("2", "two");
    map.put("3", "three");
    sbuilder.insert(0, map);
 
    System.out.printf("%s\n\n", sbuilder);
  }
}

실행 결과:

-------------------------------- testInsertAPIs -------------------------------
{3=three, 2=two, 1=one}
12345StringBUFFERStringBufferBUILDERStringBuilder12345100
true3.141591.414ABCabcde

2.2 StringBuilder에 관련 API 추가
소스코드는 다음과 같습니다(StringBuilderAppendTest.java) :

/**
 * StringBuilder 的append()示例
 *
 * @author skywang
 */
import java.util.HashMap;
 
public class StringBuilderAppendTest {
 
  public static void main(String[] args) {
    testAppendAPIs() ;
  }
 
  /**
   * StringBuilder 的append()示例
   */
  private static void testAppendAPIs() {
 
    System.out.println("-------------------------------- testAppendAPIs -------------------------------");
 
    StringBuilder sbuilder = new StringBuilder();
 
    // 追加字符数组
    sbuilder.append(new char[]{'a','b','c','d','e'});
    // 追加字符数组。0表示字符数组起始位置,3表示长度
    sbuilder.append(new char[]{'A','B','C','D','E'}, 0, 3);
    // 追加float
    sbuilder.append(1.414f);
    // 追加double
    sbuilder.append(3.14159d);
    // 追加boolean
    sbuilder.append(true);
    // 追加char
    sbuilder.append('\n');
    // 追加int
    sbuilder.append(100);
    // 追加long
    sbuilder.append(12345L);
    // 追加StringBuilder对象
    sbuilder.append(new StringBuilder("StringBuilder"));
    // 追加StringBuilder对象。6表示被追加对象的起始位置(包括),13是结束位置(不包括)
    sbuilder.append(new StringBuilder("STRINGBUILDER"), 6, 13);
    // 追加StringBuffer对象。
    sbuilder.append(new StringBuffer("StringBuffer"));
    // 追加StringBuffer对象。6表示被追加对象的起始位置(包括),12是结束位置(不包括)
    sbuilder.append(new StringBuffer("STRINGBUFFER"), 6, 12);
    // 追加String对象。
    sbuilder.append("String");
    // 追加String对象。1表示被追加对象的起始位置(包括),6是结束位置(不包括)
    sbuilder.append("0123456789", 1, 6);
    sbuilder.append('\n');
 
    // 追加Object对象。此处以HashMap为例
    HashMap map = new HashMap();
    map.put("1", "one");
    map.put("2", "two");
    map.put("3", "three");
    sbuilder.append(map);
    sbuilder.append('\n');
 
    // 追加unicode编码
    sbuilder.appendCodePoint(0x5b57);  // 0x5b57是“字”的unicode编码
    sbuilder.appendCodePoint(0x7b26);  // 0x7b26是“符”的unicode编码
    sbuilder.appendCodePoint(0x7f16);  // 0x7f16是“编”的unicode编码
    sbuilder.appendCodePoint(0x7801);  // 0x7801是“码”的unicode编码
 
    System.out.printf("%s\n\n", sbuilder);
  }
}

실행 결과:

-------------------------------- testAppendAPIs -------------------------------
abcdeABC1.4143.14159true
10012345StringBuilderBUILDERStringBufferBUFFERString12345
{3=three, 2=two, 1=one}
字符编码

2.3 StringBuilder의 대체 관련 API
소스 코드는 다음과 같습니다(StringBuilderReplaceTest.java):

/**
 * StringBuilder 的replace()示例
 *
 * @author skywang
 */
import java.util.HashMap;
 
public class StringBuilderReplaceTest {
 
  public static void main(String[] args) {
    testReplaceAPIs() ;
  }
 
  /**
   * StringBuilder 的replace()示例
   */
  private static void testReplaceAPIs() {
 
    System.out.println("-------------------------------- testReplaceAPIs ------------------------------");
 
    StringBuilder sbuilder;
 
    sbuilder = new StringBuilder("0123456789");
    sbuilder.replace(0, 3, "ABCDE");
    System.out.printf("sbuilder=%s\n", sbuilder);
 
    sbuilder = new StringBuilder("0123456789");
    sbuilder.reverse();
    System.out.printf("sbuilder=%s\n", sbuilder);
 
    sbuilder = new StringBuilder("0123456789");
    sbuilder.setCharAt(0, 'M');
    System.out.printf("sbuilder=%s\n", sbuilder);
 
    System.out.println();
  }
}

실행 결과:

-------------------------------- testReplaceAPIs ------------------------------
sbuilder=ABCDE3456789
sbuilder=9876543210
sbuilder=M123456789

2.4 StringBuilder의 삭제 관련 API
소스코드는 다음과 같습니다(StringBuilderDeleteTest.java):

/**
 * StringBuilder 的delete()示例
 *
 * @author skywang
 */
import java.util.HashMap;
 
public class StringBuilderDeleteTest {
 
  public static void main(String[] args) {
    testDeleteAPIs() ;
  }
 
  /**
   * StringBuilder 的delete()示例
   */
  private static void testDeleteAPIs() {
 
    System.out.println("-------------------------------- testDeleteAPIs -------------------------------");
 
    StringBuilder sbuilder = new StringBuilder("0123456789");
 
    // 删除位置0的字符,剩余字符是“123456789”。
    sbuilder.deleteCharAt(0);
    // 删除位置3(包括)到位置6(不包括)之间的字符,剩余字符是“123789”。
    sbuilder.delete(3,6);
 
    // 获取sb中从位置1开始的字符串
    String str1 = sbuilder.substring(1);
    // 获取sb中从位置3(包括)到位置5(不包括)之间的字符串
    String str2 = sbuilder.substring(3, 5);
    // 获取sb中从位置3(包括)到位置5(不包括)之间的字符串,获取的对象是CharSequence对象,此处转型为String
    String str3 = (String)sbuilder.subSequence(3, 5);
 
    System.out.printf("sbuilder=%s\nstr1=%s\nstr2=%s\nstr3=%s\n",
        sbuilder, str1, str2, str3);
  }
}

🎜>

2.5 StringBuilder의 index 관련 API

소스 코드는 다음과 같습니다(StringBuilderIndexTest.java):

-------------------------------- testDeleteAPIs -------------------------------
sbuilder=123789
str1=23789
str2=78
str3=78


실행 결과:

/**
 * StringBuilder 中index相关API演示
 *
 * @author skywang
 */
import java.util.HashMap;
 
public class StringBuilderIndexTest {
 
  public static void main(String[] args) {
    testIndexAPIs() ;
  }
 
  /**
   * StringBuilder 中index相关API演示
   */
  private static void testIndexAPIs() {
    System.out.println("-------------------------------- testIndexAPIs --------------------------------");
 
    StringBuilder sbuilder = new StringBuilder("abcAbcABCabCaBcAbCaBCabc");
    System.out.printf("sbuilder=%s\n", sbuilder);
 
    // 1. 从前往后,找出"bc"第一次出现的位置
    System.out.printf("%-30s = %d\n", "sbuilder.indexOf(\"bc\")", sbuilder.indexOf("bc"));
 
    // 2. 从位置5开始,从前往后,找出"bc"第一次出现的位置
    System.out.printf("%-30s = %d\n", "sbuilder.indexOf(\"bc\", 5)", sbuilder.indexOf("bc", 5));
 
    // 3. 从后往前,找出"bc"第一次出现的位置
    System.out.printf("%-30s = %d\n", "sbuilder.lastIndexOf(\"bc\")", sbuilder.lastIndexOf("bc"));
 
    // 4. 从位置4开始,从后往前,找出"bc"第一次出现的位置
    System.out.printf("%-30s = %d\n", "sbuilder.lastIndexOf(\"bc\", 4)", sbuilder.lastIndexOf("bc", 4));
 
    System.out.println();
  }
}

2.6 StringBuilder 나머지 API

소스 코드는 다음과 같습니다(StringBuilderOtherTest.java):

-------------------------------- testIndexAPIs --------------------------------
sbuilder=abcAbcABCabCaBcAbCaBCabc
sbuilder.indexOf("bc")     = 1
sbuilder.indexOf("bc", 5)   = 22
sbuilder.lastIndexOf("bc")   = 22
sbuilder.lastIndexOf("bc", 4) = 4


실행 결과:

/**
 * StringBuilder 的其它API示例
 *
 * @author skywang
 */
import java.util.HashMap;
 
public class StringBuilderOtherTest {
 
  public static void main(String[] args) {
    testOtherAPIs() ;
  }
 
  /**
   * StringBuilder 的其它API示例
   */
  private static void testOtherAPIs() {
 
    System.out.println("-------------------------------- testOtherAPIs --------------------------------");
 
    StringBuilder sbuilder = new StringBuilder("0123456789");
 
    int cap = sbuilder.capacity();
    System.out.printf("cap=%d\n", cap);
 
    char c = sbuilder.charAt(6);
    System.out.printf("c=%c\n", c);
 
    char[] carr = new char[4];
    sbuilder.getChars(3, 7, carr, 0);
    for (int i=0; i<carr.length; i++)
      System.out.printf("carr[%d]=%c ", i, carr[i]);
    System.out.println();
 
    System.out.println();
  }
}

3. StringBuilder 전체 예제

다음 예제는 위의 예제를 통합한 완전한 StringBuilder 데모 프로그램이며, 소스 코드는 다음과 같습니다(StringBuilderTest.java):

-------------------------------- testOtherAPIs --------------------------------
cap=26
c=6
carr[0]=3 carr[1]=4 carr[2]=5 carr[3]=6

Java 및 API 배열에서 StringBuilder 문자열 유형의 연산 방법에 대한 더 많은 관련 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!

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