字符串基本操作

【String及其常用API】

1、String是不可变对象

java.lang.String使用了final修饰,不能被继承;

字符串底层封装了字符数组及针对字符数组的操作算法;

字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值;

Java字符串在内存中采用Unicode编码方式,任何一个字符对应两个字节的定长编码。

2、String常量池

Java为了提高性能,静态字符串(字面量/常量/常量连接的结果)在常量池中创建,并尽量使用同一个对象,重用静态字符串;

对于重复出现的字符串直接量,JVM会首先在常量池查找,如果存在即返回该对象。

/** 测试String常量池*/

@Test

public void testConstantPool(){

String str1="Hello";

String str2="Hello";//不会创建新的String对象,而是使用常量池中已有的"Hello"

System.out.println(str1==str2);//输出true

String str3=new String("Hello");

System.out.println(str1==str3);//输出false

}

3、内存编码及长度

String在内存中采用Unicode编码,每个字符占用两个字节;任何一个字符(无论中文还是英文)都算1个字符长度,占用两个字节。

/** 获取String对象的长度*/

@Test

public void testLength(){

String str1="Hello";

String str2="你好,String";

}

4、使用indexOf实现检索

indexOf方法用于实现在字符串中检索另外一个字符串

String提供几个重载的indexOf方法

int indexOf(String str):在字符串中检索str,返回其第一次出现的位置,如果找不到则返回-1

int indexOf(String str,int fromIndex):从字符串的fromIndex位置开始检索

String还定义有lastIndexOf方法:

int lastIndexOf(String str,int from):str在字符串中多次出现时,将返回最后一个出现的位置

/**在一个字符串中检索另外一个字符串*/

@Test

public void testIndexOf(){

String str="I can because i think i can";

int index=str.indexOf("can");

System.out.println(index);//2

index=str.lastIndexOf("can");

System.out.println(index);//24

index=str.indexOf("can",6);

System.out.println(index);//24

index=str.indexOf("Can");

System.out.println(index);//-1

}

5、使用substring获取子串

substring方法用于返回一个字符串的子字符串。

substring常用重载方法定义如下:

String substring(int beginIndex,int endIndex):返回字符串中从下标beginIndex(包括)开始到endIndex(不包括)结束的子字符串

String substring(int beginIndex):返回字符串中从下标beginIndex(包括)开始到字符串结尾的子字符串

/** 在一个字符串中截取指定的字符串*/

@Test

public void testSubstring(){

String subStr=str.substring(11,17);

System.out.println(subStr);//oracle

subStr=str.substring(7);

System.out.println(subStr);//www.oracle.com

}

6、trim(查阅API)

/** 去掉一个字符串的前导和后继空字符*/

@Test

public void testTrim(){

String userName=" good man ";

userName=userName.trim();

System.out.println(userName.length());//8

System.out.println(userName);//good man

}

7、chaAt(查阅API)

String中定义有charAt方法:

char charAt(int index):方法charAt()用于返回字符串指定位置的字符。参数index表示指定的位置

/** 遍历一个字符串中的字符序列*/

@Test

public void testCharAt(){

String name="Whatisjava?";

for(int i=0;i

char c=name.charAt(i);

}

//W h a t i s j a v a?

}

8、startsWith和endsWith(查阅API)

/** 检测一个字符串是否以指定字符串开头或结尾*/

@Test

public void testStartWithAndEndWith(){

String str="Thinking in Java";

System.out.println(str.endsWith("Java"));//true

System.out.println(str.startsWith("T"));//true

System.out.println(str.endsWith("thinking"));//false

}

9、大小写变换(查阅API)

/** 转换字符串英文字母的大小写形式*/

@Test

public void testToUpperCaseAndToLowerCase(){

String str="我喜欢Java";

str=str.toUpperCase();

System.out.println(str);//我喜欢JAVA

str=str.toLowerCase();

System.out.println(str);//我喜欢java

}

10、valueOf(查阅API)

/** 将其他类型转换为字符串类型 */

public void testValueOf(){

double pi=3.1415926;

int value=123;

boolean flag=true;

char[] charArr={'a','b','c','d','e','f','g'};

String str=String.valueOf(pi);

str=String.valueOf(value);

str=String.valueOf(flag);

str=String.valueOf(charArr);

}

【StringBuilder及其API】

1、StringBuilder封装可变字符串

StringBuilder封装可变的字符串,对象创建后可以通过调用方法改变其封装的字符序列。

StringBuilder有如下常用构造方法:

public StringBuilder()

public StringBuilder(String str)

2、StringBuilder常用方法

StringBuilder append(String str):追加字符串

StringBuilder insert(int dstOffset,String s):插入字符串

StringBuilder delete(int start,int end):删除字符串

StringBuilder replace(int start,int end,String str):替换字符串

StringBuilder reverse():字符串反转

3、StringBuilder

StringBuilder的很多方法的返回值均为StringBuilder类型。这些方法的返回语句均为:return this。

由于改变封装的字符序列后又返回了该对象的引用。可以按照如下简洁的方式书写代码:

buf.append("ibm").append("java").insert(3,"oracle").replace(9,13,"JAVA");

4、append方法(查阅API)

/** 测试StringBuilder的append方法 */

@Test

public void testAppend(){

StringBuilder buf=new StringBuilder("Programming Language:");

buf.append("java").append("cpp").append("php").append("c#").append(objective-c);

}

4、insert(查阅API)

/** 测试StringBuilder的insert方法 */

@Test

public void testInsert(){

StringBuilder buf=new StringBuilder("javacppc#objective-c");

buf.insert(9,"php");

}

5、delete(查阅API)

/** 测试StringBuilder的delete方法 */

@Test

public void testDelete(){

StringBuilder buf=new StringBuilder("javaoraclecppc#php");

buf.delete(4,4+6);

}

6、StringBuilder总结

StringBuilder是可变字符串。字符串的内容计算,建议采用StringBuilder实现,这样性能会好一些;

java的字符串连接的过程是利用StringBuilder实现的

String s="AB";

String s1=s+"DE"+1;

String s1=new StringBuilder(s).append("DE").append(1).toString();

StringBuffer和StringBuilder

StringBuffer是线程安全的,同步处理的,性能稍慢

StringBuilder是非线程安全的,并发处理的,性能稍快

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180224G14OKC00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券