关于java JDK中内置的一个类:java.lang.String
为什么sun公司把字符串存储在一个“字符串常量池”中?
因为字符串在实际开发中使用太频繁,为了执行效率,所以把字符串放到了方法区的字符串常量池中。
public class StringTest04{
public static void main(Sting[] args){
//创建字符串对象最常见的一种方式
String s1 = "hello world!";
//s1这个变量中保存的是一个内存地址
//按说一下应该输出一个地址
//但是输出一个字符串,说明string类已经重写了toString()方法
System.out.println(s1);
System.out.println(s1.toString());
//这里只掌握常用的构造方法
byte[] bytes = {97,98,99};//97是a,98是b,99是c
String s2 = new String(bytes);
//前面说过:输出一个引用的时候,会自动调用toString()方法,默认Object的话,会自动输出对象的内存地址
//通过输出结果我们得出一个结论:String类已经重写了toStirng()方法
//输出字符串的话,输出的不是对象的内存地址,而是字符串本身
System.out.println(s2.toString());//abc
System.out.println(s2);//abc
}
}
//String(字节数组,数组下标的起始位置,长度)
String s3 = new String(bytes,1,2);
System.out.println(s3);//bc
//将char数组全部转换成字符串
char[] chars = {'我','是','中','国','人'};
String s4 = new String(chars);
System.out.println(s4);
//将char数组的一部分转换成字符串
Stirng s5 = new String(chars,2,3);
System.out.println(s5);
总结:关于String类中的构造方法
//String类当中最常用的方法
char c = "中国人".charAt(1);//中国人是一个字符串String对象。只要是对象就能“点”
System.out,println(c);//国
int result = "abc".compare("abc");
System.out.println(result);//0(等于0)前后一致
int result = "abcd".compareTo("abcd");
System.out.println(result2);//-1(小于0)前小后大
int reslut3 = "abce".compare("abcd");
System.out.println(reslut3);//1(大于0)前大后小
字符串之间比较大小不能直接使用< >,需要使用compareTo方法
System.out.println("HelloWorld.java".contains(".java"));//true
System.out.prinln("http://www.baidu.com".contains("https://"));//false
System.out.println("test.txt".endWith(".java"));//false
System.out.println("test.txt".endWith(".txt"));//true
System.out.println("daskhjkgvahjfkghdkjfhss".endWith("ss"));//true
System.out.peintln("abc".equals("abc"));//true
System.out.println("ABC".equalsIgnoreCase("abc"));//true
将字符串对象转换成字节数组
byte[] byte = "abcdef".getByte();
for(int i = 0;i < byte.length; i++){
System.out.println(bytes[i]);
}
System.out.println("oraclejavac++.net#phppythonjavaoraclec++".index("java"));//6
String s = "a";
System.out.println(s.isEmpty());
Seytem.out.println("abc".length());//3
System.out.println("oraclejavac++c#pythonphpjavapython".LastIndexOf("java"));//22
String newString = "http://www.baidu.com".replace("http://","https://");
System.out.println(newString);//https://www.baidu.com
//把以下字符串的"="换成":"
String newString2 = "name=zhangsan&password=123&age=20".repalce("=",":");
System.out.println(newString2);//name:zhangdsan&password:123&age:10
String[] ymd = "1990-10-23".split("-");//"1990-10-23"以"-"分隔符进行拆分
for(int i = 0;i< ymd,length;i++){
System.out.println(ymd[1]);
}
System.out.println("http://www.baidu.com".startWith("http"));//true
System.out.println("http://www.baidu.com".startWith("https"));//false
System.out.println("http://www.baidu.comn".substring(7));//www.baidu.com
System.out.println("http://www.baidu.com".substring(7,10))l//www
左闭右开!
char[] chars = "我是中国人"。toLowerArray();
for(int i = 0;i<chars.length;i++){
System.out.println(chars[i]);
}
System.out.println("ABCDefKXyz".toLoweCase());
System.out.println("ABCDefKXyz".toUpperCase());
System.out.println(" hello world ".trim());
String s1 = String.valueOf(3.14);
System.out.println(s1);
append表示追加,append方法底层在进行追加的时候,如果byte数组满了,会自动扩容
StringBuffer底层实际上是一个byte[ ]数组,往StringBuffer中放字符串,实际上是放到byte数组里了。StringBuffer的初始化容量是16