String
1、创建字符串
方式一
String str = "abcde";//直接赋值
方式二
String str2 = new String("abcde");//调用构造方法
方式三
char[] array = {'a', 'b', 'c'}; String str3 = new String(array);
2、观察下列代码输出理解字符串内存布局,String 使用 == 比较并不是在比较字符串内容, 而是比较两个引用是否是指向同一个对象
String s1="abcde";
String s2=new String("abcde");
System.out.println(s1==s2);//false
String s1="abcde";
String s3="abcde";
System.out.println(s1==s3);//true
String s1="abcde";
String s4="abc"+new String("def");
System.out.println(s1==s4);//false
String s1="abcde";
char[] arr={'a','b','c','d','e'};
String s3=new String(arr);
System.out.println(s1==s3);//false
String s1="abcde";
String s2="abc"+"de";
String s6 = "abc";
String s7 = "def";
String s8 = s6+s7;
System.out.println(s1==s2);//true
System.out.println(s1==s8);//false
String s1="abcde";
String s2=new String("abcde").intern();
System.out.println(s1==s2);
3、下面的代码生成了几个对象?
int a = 360;
String str = "abc"+"def" + a;
System.out.println(str);
==生成了一个对象==
,"abc"+"def"在编译器已经确定了,而a是一个变量(不是对象)。
String s="hello";
s=s+"world";
s+="!!!";
System.out.println(s);
生成了五个对象
4、String的常见操作
1、字符串比较内容是否相同:equals()方法
String str1 = "hello" ;
String str2 = "Hello" ;
System.out.println(str1.equals(str2)); // false
System.out.println(str1.equalsIgnoreCase(str2)); // true,忽略大小写
2、字符串比大小compareTo()
System.out.println("A".compareTo("a")); // -32
System.out.println("a".compareTo("A")); // 32
System.out.println("A".compareTo("A")); // 0
System.out.println("AB".compareTo("AC")); // -1
System.out.println("刘".compareTo("杨"));
compareTo()是一个可以区分大小关系的方法,是String方法里是一个非常重要的方法。
先比较第一 个字符的大小(根据 unicode 的值来判定), 如果不分胜负, 就依次比较后面的内容
3、 字符串查找contains()
String str = "helloworld" ;
System.out.println(str.contains("world")); // true
5、字符串替换
String str = "helloworld" ;
System.out.println(str.replace("l", "_"));
System.out.println(str.replaceAll("l", "_"));
System.out.println(str.replaceFirst("l", "_"));
//注意替换会生成一个新字符串
6、字符串拆分
String str = "hello world hello bit" ;
String[] result = str.split(" ") ;
// 按照空格拆分
for(String s: result) {
System.out.println(s);
}
//字符串部分拆分
String str = "hello world hello bit" ;
String[] result = str.split(" ",2) ;
for(String s: result) {
System.out.println(s);
拆分成两份
- 字符"|","*","+“都得加上转义字符,前面加上”".
- 而如果是"",那么就得写成"\".
- 如果一个字符串中有多个分隔符,可以用"|"作为连字符.
String str = "192.168.1.1" ;
String[] result = str.split("\\.") ;
for(String s: result) {
System.out.println(s);
}
7、字符串截取substring
String str = "helloworld" ;
System.out.println(str.substring(5));
System.out.println(str.substring(0, 5));
//索引从零开始,左闭右开
8、trim 会去掉字符串开头和结尾的空白字符(空格, 换行, 制表符等)、
大小写转换:.toUpperCase()||| toLowerCase()
9、String是不可变的,任何的字符串常量都是String对象,而且String的常量一旦声明不可改变,如果改变对象内容,改变的是其引用的指 向而已。
StringBuffer 和 StringBuilder
相对于String他是可修改的和可扩充的,即在原字符串上修改
StringBuffer 是线程安全的
StringBuilder 速度快,但线程不安全
String str = "abc";
StringBuffer sb = new StringBuffer();
sb.append(str);
System.out.println(sb.insert(3, "d"));
StringBuilder s=new StringBuilder("ght");