孤独但不寂寞——字符串类
今天发生了很多事,反思了一下最近的生活和学习,发生最近的博客没有起到太多学习的作用,反倒有点像是女生做笔记,凡事做的巨细无比,但这起不到归纳总结的作用,所以今后可能文字会越来越少,甚至不写。但是好消息是csdn的markdown今天又有大的更新了。我看了一下多了一些新的内容,我忍不住去试一下,所以博客还是会坚持写的!
谈一下字符串
字符串在生活中十分常见,例如我们常说的“Hello World!”。
String类位于java.lang包中,具有丰富的方法
计算字符串的长度、比较字符串、连接字符串、提取字符串
如何新建一个字符串对象?
从此处就可以看出string是一个类类型数据
String s = "Hello World";
String s = new String();
String s = new String("Hello World");
Java中任何对象都能通过其toString()方法转换成字符串进行输出,方便调试。
这是由于原始基类Object里面有这个方法
获取字符串长度
String类提供了length()方法,获得字符串的长度 。
注意:Java返回的字符串长度是以Unicode字符为基础计算的。(一个中文汉字算一个字符)
字符串比较
String类提供了equals( )方法,比较存储在两个字符串对象的内容是否一致。
“==”和equals()有什么区别呢?
equals():检查组成字符串内容的字符是否完全一致
==:判断两个字符串在内存中的首地址,即判断是否是同一个字符串对象
登录时一般不考虑用户名的大小写问题
使用equalsIgnoreCase()方法
使用toLowerCase()方法
使用toUpperCase( )方法
字符串连接
方法1:使用“+”
int sqlScore = 80; //sql成绩
int javaScore = 90; //java成绩
int htmlScore = 86; //html成绩
String scoreSheet = "SQL:" + sqlScore + " Java:" + javaScore + " HTML:" + htmlScore;
方法2:使用String类的concat()方法
String s = new String("你好,");
String name = new String("张三!");
String sentence = s.concat(name);
System.out.println(sentence);
字符串常用提取方法
字符串拆分
String类提供了split()方法,将一个字符串分割为子字符串,结果作为字符串数组返回
public class Lyric {
public static void main(String[] args) {
String words="长亭外 古道边 芳草碧连天 晚风扶 柳笛声残 夕阳山外山";
String[ ] printword=new String[100];
System.out.println("***原歌词格式***\n"+words);
System.out.println("\n***拆分后歌词格式***");
printword=words.split(" ");
for(int i=0;i<printword.length;i++){
System.out.println( printword[i] );
}
}
}
这个例子不太好,因为在for循环里面执行判断时,要先计算
printword.length,这个比较耗时间。
在Java执行时会维护一个String池(Pool),当直接在程序中使用“”来包括一个字符串时,该字符串就会在String池中。
对于一些可以共享的字符串对象,会先在String池中查找是否存在相同的String内容(字符相同),如果有就直接返回,而不是直接创造一个新的String对象,以减少内存的耗用。
所以String str1=“abc”; 和 String str2 =“abc”;都是指向的同一内存
字符串的修改
Java中使用字符串有一个非常重要的规则必须记得,一个字符串对象一旦被配置,它的内容就是固定不可变的。
所以每次修改string的值,其实都是指向另一个内存。
StringBuffer
每次想改变String对象,都要创建一个新的String对象,效率低
对字符串频繁修改(如字符串连接)时,使用StringBuffer类可以大大提高程序执行效率
StringBuffer声明
StringBuffer sb = new StringBuffer();
StringBuffer sb = new StringBuffer("aaa");
StringBuffer的使用
sb.toString(); //转化为String类型
sb.append("**"); //追加字符串
sb.insert (1, "**"); //插入字符串
String和StringBuffer性能对比