//1. ”==”:进行的数值比较,比较的是两个字符串对象的内存地址数值。
//2. “equals()”:可以进行字符串内容的比较
//String、StringBuffer、StringBuilder的区别: String的内容不可修改,StringBuffer与StringBuilder的内容可以修改. StringBuffer采用同步处理,属于线程安全操作;而StringBuilder采用异步处理,属于线程不安全操作。
//实例化的区别 匿名对象和构造方达
public static void code1(){
String str1= "hello";
String str2=new String("hello"); //匿名对象一定保存在堆内存中
System.out.println(str1.equals(str2)); //ture
System.out.println(str1==str2); //false
System.out.println("hello".equals(str1)); //ture
//直接复制产生对象池:所谓的对象池就是一个对象数组(目的就是减少开销)
//如果现在采用了直接赋值的模式进行String类的对象 实例化操作,那么该实例化对象(字符串内容)将自动保存到这个对象池之中。
//如果下次继续使用直接赋值的模式 声明String类对象,此时对象池之中如若有指定内容,将直接进行引用;如若没有,则开辟新的字符串对象而后将 其保存在对象池之中以供下次使用
//实际上。str3和str4是同一块堆内存。在进行直接赋值的时候。str3就保存在了对象池中。str4直接使用str3的内容。
String str3="this";
String str4="this";
System.out.println(str3 == str4); // true
//如果使用String构造方法就会开辟两块堆内存空间,并且其中一块堆内存将成为垃圾空间。
//该字符串常量并没有保存在对象池中。所以str5!=str6,他们保存在不同的堆空间
String str5=new String("hello");
String str6="hello";
System.out.println(str5==str6); //false
String str7=new String("hehhe").intern(); //强制入池,产生直接匿名对象保存在池中
String str8="hehhe"; //在池中找到了hehhe,直接使用str7的地址
System.out.println(str7==str8); //true
}
//字符串不可变更性
//1. 字符串使用就采用直接赋值。
//2. 字符串比较就使用equals()实现。
//3. 字符串别改变太多。
public static void code2(){
String str="hello";
str=str+" word";
str+="!!!";
System.out.println(str);
//以上字符串的变更是字符串对象的变更而非字符串常量。
//造成了大量的垃圾空间 产生了五个堆内存
}
//字符与字符串
//字符串就是一个字符数组,所以在String类里面支持有字符数组转换为字符串以及字符串变为字符的操作方法。
public static void code3(){
//字符串和字符数组的相互转化
String str="this is a str";
char[] data=str.toCharArray(); //将str转化为字符数组
//输出这个字符数组
for (int i=0;i<data.length;i++){
System.out.print(data[i]);
}
System.out.println();
//字符数组转化为字符串
System.out.println(new String(data)); //全部转化
System.out.println(new String(data,5,5)); //部分转化 数组,下标,数量
}
//判断一个字符串是否全由数字组成,首先先转换成字符数组。遍历数组。每个内容进行比较。
public static boolean isNumber(String str){
char[] data1 = str.toCharArray();
for (int i = 0; i < data1.length; i++) {
if (data1[i] < '0' || data1[i] > '9') {
return false;
}
}
return true;
}
//字符串比较
//str1.equals(str2) 区分大小写的字符串比较
//str1.equalsIgnoreCase(str2) 不区分大小写的字符串比较
//str1.compareTo(str2) 比较两个字符串大小 ascll的大小
//在String类中compareTo()方法是一个非常重要的方法,该方法返回一个整型,该数据会根据大小关系返回三类内容:
// 1. 相等:返回0 2. 小于:返回内容小于0 3. 大于:返回内容大于0。
public static void code4(){
System.out.println("A".compareTo("a")); // -32
System.out.println("A".compareTo("A")); // 0
System.out.println("AB".compareTo("AC")); // -1
}
//字符串查找
//contains 判断字符串是否存在。返回true或者false
//indexof 从头开始查找字符串。如果有,返回第一个下标,如果内容重复,它只能返回查找的第一个位置,如果没有返回-1/
//startsWith 判断开头
//endsWith 判断结尾
public static void code5(){
String str="thereisastr";
System.out.println(str.contains("is")); // true
System.out.println(str.contains("world")); // false
System.out.println(str.indexOf("is")); // 5,i开始的索引
System.out.println(str.indexOf("world")); // -1,未找到
System.out.println(str.indexOf("world",3)); //从指定位置查找
System.out.println(str.startsWith("there")); // true
System.out.println(str.startsWith("is")); // false
System.out.println(str.endsWith("str")); // true
}
//字符串替换
//replaceAll 替换所有内容
//replaceFirst 替换第一个遇到的
public static void code6(){
String str="abcdabcab123456789";
System.out.println(str.replaceAll("abc", "*")); //*d*ab123456789
System.out.println(str.replaceFirst("abc", "*"));//*dabcab123456789
}
//字符串拆分
//split
// 如果发现有些内容无法拆分开就需要使用"\"转义
public static void code7(){
String str = "no one can get it" ;
String[] result = str.split(" ") ; // 按照空格拆分
//打印
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
String[] result1 = str.split(" ",2) ; //规定拆分长度
for(int i=0;i<result1.length;i++){
System.out.println(result1[i]);
}
//另一种打印方法
for(String s:result){
System.out.println(s);
}
String str1 = "192.168.1.1" ;
String[] result2 = str1.split("\\.") ; //转义字符
for(String s:result2){
System.out.println(s);
}
}
//字符串截取
//substring
public static void code8(){
String str = "helloworld" ;
System.out.println(str.substring(5)); //截取指定部分到末尾 world
System.out.println(str.substring(0, 5)); //从0-5截取指定部分 hello
}
//其他方法
public static void code9(){
System.out.println(" i fell good ".trim()); //.trim() 去掉左右空格
System.out.println("i am a sunshine boy".toUpperCase()); //.toUpperCase() 转大写
System.out.println("UNderStand".toLowerCase()); //.toLowerCase() 转小写
}
public static void main(String[] args) {
code1();
code2();
code3();
//范例:现在有一个字符串判断其是否由数字所组成
String str1="12345ppp678";
System.out.println(isNumber(str1)? "由数字组成":"非数字组成");
String str2="12345678";
System.out.println(isNumber(str2)? "由数字组成":"非数字组成");
code4();
code5();
code6();
code7();
code8();
}
```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181201174512783.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQzMjIwMjY2,size_16,color_FFFFFF,t_70)