Java笔记丨29 字符串

字符串

字符串可以分为两大类

• String类

创建之后不会再做修改和变动,即 immutable

• StringBuffer、StringBuilder类

创建之后允许再做更改和变化

其中 StringBuilder是JDK1.5增加的,它是非线程安全的

特别注意

在循环中使用String的+=可能会带来效率问题

 

示例:StringAndStringBuffer.java

import java.util.*;

class StringAndStringBuffer 

{

public static void main(String[] args) 

{

String a = "a";

String s = "";

StringBuffer sb = new StringBuffer();



final int N = 10000;



long t0 = System.currentTimeMillis();//记录时间

for( int i=0; i<N; i++) s+=a; //每一步都要生成String对象和StringBuilder对象。效率比较低。

long t1 = System.currentTimeMillis();

for( int i=0; i<N; i++) sb.append(a);

long t2 = System.currentTimeMillis();



System.out.println(t1-t0);

System.out.println(t2-t1);

}

}

运行结果(可能不同):

73

0

扫描二维码关注公众号,回复: 4680413 查看本文章

 

String类

String类对象保存不可修改的Unicode字符序列

String类的下述方法能创建并返回一个新的String对象实例: 

concat(连接), replace(替换),replaceAll(替换全部), substring, toLowerCase(变小写), toUpperCase(变大写), trim(去前后空格),toString.

查找: endsWith(是否以...结尾), startsWith(是否以...开头), indexOf(查找字符串位置),lastIndexOf(查找最后一次出现的位置).

比较: equals, equalsIgnoreCase(忽略大小写比较)

字符及长度: charAt(第几个位置的字符),length.

 

Jdk1.5 增加了format函数

%1$,8.5f %序号$ 标识 宽度及精度 转换方式。%后面数表示第几个参数,逗号表示显示千分位,8.5表示宽度8,小数位数后面占5位小数,f表示实数。

 

例:TestStringMethod.java

class TestStringMethod

{

public static void main(String[] args) 

{

String s = new String( "Hello World" );



System.out.println( s.length() );

System.out.println( s.indexOf('o') );

System.out.println( s.indexOf("He") );

System.out.println( s.startsWith("He") );

System.out.println( s.equals("Hello world") );

System.out.println( s.equalsIgnoreCase("Hello world") );

System.out.println( s.compareTo("Hello Java") );

System.out.println( s.charAt(1) );

System.out.println( s.substring(0,2) );

System.out.println( s.substring(2) );

System.out.println( s.concat("!!!") );

System.out.println( s.trim() );

System.out.println( s.toUpperCase() );

System.out.println( s.toLowerCase() );

System.out.println( s.replace('o', 'x' ) );



System.out.println( s );  //注意,s本身没有改变

}

}

运行结果:

11

4

0

true

false

true

13

e

He

llo World

Hello World!!!

Hello World

HELLO WORLD

hello world

Hellx Wxrld

Hello World

 

字符串常量

除了immutable特点外,还要注意String常量的内部化(interned)问题,即同样的字符串常量是合并的(是指向同一个引用的),以保证 “abc”==“abc”。

但是 “abc” != new String(“abc”)

 

StringBuffer类

• StringBuffer类对象保存可修改的Unicode字符序列:

• StringBuilder类似,它效率更高,不考虑线程安全性

• 构造方法

StringBuffer()

StringBuffer(int capacity)

StringBuffer(String initialString)

• 实现修改操作的方法:

append追加,insert插入, reverse反转, setCharAt修改其中一个字符, setLength设定字符串的长度。

和String不同的是它返回的是本身,String是产生一个新的。

 

字符串的分割

• java.util.StringTokenizer类提供了对字符串进行分割的功能。

• 构造

StringTokenizer(String str, String delim);

• 该类的重要方法有:

public int countTokens();// 分割串的个数

public boolean hasMoreTokens();// 是否还有分割串

public String nextToken();// 得到下一分割串

 

例:TestStringTokenizer.java

import java.util.*;

class TestStringTokenizer 

{

public static void main(String[] args) 

{

StringTokenizer st = new StringTokenizer("this is a test", " ");//按空格分割

while (st.hasMoreTokens()) {

System.out.println(st.nextToken());//显示每个分割

}

st = new StringTokenizer("253,197,546", ",");//按逗号分割

double sum = 0;

while (st.hasMoreTokens()) {

sum += Double.parseDouble(st.nextToken());//每部分解析成double求和

}

System.out.println( sum );

}

}

运行结果:

this

is

a

test

996.0

 

猜你喜欢

转载自blog.csdn.net/qq_42968048/article/details/85302003
今日推荐