一.JAVA字符串(String)简介
1.字符串(String)的创建
在 Java 中,字符串被作为 String 类型的对象处理。 String 类位于 java.lang 包中。默认情况下,该包被自动导入所有的程序。
JAVA中创建字符串(String)对象的方法有三种:
/**创建字符串(String)的三种方法*/
//1.创建一个字符串对象string,名为:str1
String str1="string";
//2.创建一个空的字符串,名为str2
String str2=new String();
//3.创建一个字符串对象string,名为:str3
String str3=new String("string");
2.字符串的不变性
String 对象创建后则不能被修改,是不可变的,所谓的修改其实是创建了新的对象,所指向的内存空间不同
package com.liangdianshui.string;
public class StringImmutability {
public static void main(String[] args) {
// 字符串中的不变性
String str1 = "aaaaa";
String str2 = "aaaaa";
String str3 = new String("bbbbb");
String str4 = new String("bbbbb");
// == 是对比两个字符串的内存地址 并非对比字符串的值
//多次出现的字符常量,JAVA编译的时候只创建一个,str1和str2都指向了这个内存地址,所以是true
System.out.println(str1 == str2);
//str1和str3是不同的对象,所以是false
System.out.println(str1 == str3);
//str3和str4是不同的对象,所以是false
System.out.println(str3 == str4);
//这样修改字符串的值,其实是让str1指向了新的内存空间
str1 += "hello";
}
}
运行结果:
true
false
false
修改字符串实质是让字符串变量指向新的内存空间,字符串一旦在内存中创建,则这个字符串将不可改变,如果需要改变字符串,可以使用StringBuffer或者StringBuilder。
3.字符串的常用方法
注意:
1. 字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1
2. 使用 indexOf 进行字符或字符串查找时,如果匹配返回位置索引;如果没有匹配结果,返回 -1
3. 使用 substring(beginIndex , endIndex) 进行字符串截取时,包括 beginIndex 位置的字符,不包括 endIndex 位置的字符;就是左闭右开区间
4. “==”和equals的区别
==:是判断两个字符串在内存中首地址是否相同,即判断是否是同一个字符串对象
equals:是比较存储在两个字符串对象中的内容是否一致
5. 字节是计算机存储信息中的基本单位,1字节等于8位,gbk编码中1个汉字字符存储需要2个字节,1个英文字符存储需要1个字节!汉字的字节值为负数,原因是因为每个字节是8位,最大值不能超过127,而汉字转为自节后超过127,如果超出会溢出,以负数的形式显示!
package com.liangdianshui.string;
public class StringMethod {
public static void main(String[] args) {
String str=new String("JAVA C");
System.out.println("str字符串的长度:"+str.length());
//注意字符串的索引从0开始
System.out.println("查询'A'在字符串str第一次出现的位置:"+str.indexOf("A"));
System.out.println("查询子字符串“AVA”第一次出现的位置:"+str.indexOf("AVA"));
System.out.println("查询'A'在字符串str最后一次出现的位置:"+str.lastIndexOf("A"));
System.out.println("查询子字符串“AVA”最后一次出现的位置:"+str.lastIndexOf("AVA"));
System.out.println("查询字符串第一位到最后一位的子字符串:"+str.substring(1));
System.out.println("查询字符串第一位到第三位的子字符串:"+str.substring(1,3));
System.out.println("去除字符串中的空格:"+str.trim());
System.out.println("比较两个字符串:"+"JAVA".equals(str));
System.out.println("将字符串转为小写:"+str.toLowerCase());
System.out.println("获取字符串指定位置的字符:"+str.charAt(2));
System.out.println("将字符串按空格分割为子字符串:"+str.split(" ")[0]);
System.out.println("将字符串按空格分割为子字符串:"+str.split(" ")[1]);
System.out.println("将字符串转为Byte数组:"+str.getBytes()[0]); //'J'的ASCII码十进制是74
}
}
运行结果:
str字符串的长度:6
查询'A'在字符串str第一次出现的位置:1
查询子字符串“AVA”第一次出现的位置:1
查询'A'在字符串str最后一次出现的位置:3
查询子字符串“AVA”最后一次出现的位置:1
查询字符串第一位到最后一位的子字符串:AVA C
查询字符串第一位到第三位的子字符串:AV
去除字符串中的空格:JAVA C
比较两个字符串:false
将字符串转为小写:java c
获取字符串指定位置的字符:V
将字符串按空格分割为子字符串:JAVA
将字符串按空格分割为子字符串:C
将字符串转为Byte数组:74
String类是具有不可变性的,所以当频繁操作字符串的时候,会额外产生很多的临时变量,使用StringBuilder和StringBuffer就可以解决这个问题!StringBuilder和StringBuffer基本是相似的,他们的区别是StringBuffer是线程安全的,而StringBuilder没有实现线程安全,所以性能略高!一般的情况下,对字符串进行操作,使用StringBuilder!!!!
1.StringBuilder常用的方法:
Demo:http://download.youkuaiyun.com/detail/two_water/9408668