String字符串
一、了解字符串及赋值方式
1.什么是字符串?
String类位于java.lang包中,具有丰富的方法计算字符串的长度、比较字符串、连接字符串、提取字符串
(1) String类位于java.lang包中;
字符串是一个特殊的对象;
字符串一旦初始化就不可以被改变;
字符串String角标都以0开始。
(2) String类提供了多个方法对字符串进行操作;
(3) 常见的操作:获取、判断、切割、替换、转换、去空格、比较、连接
2.赋值方式
直接赋值
构造方法赋值
字符串池 String pool
二、字符串池的优缺点:
字符串池的优点就是避免了相同内容的字符串的创建,节省了内存,省去了创建相同字符串的时间,同时提升了性能;
另一方面,字符串池的缺点就是牺牲了JVM在常量池中遍历对象所需要的时间,不过其时间成本相比而言比较低。
三、String类的常用方法
1、获取:
1.1获取字符串长度
int length(); //注意:长度是指个数,不是字节数。
1.2获取字符串位置上某个字符
char charAt(int index);
//当int index的值大于字符串最大的角标时,会发生StringIndexOutOfBoundsException错误。
1.3.根据字符获得该字符在字符串中的位置
int indexOf(int ch); //返回ch在字符串中第一次出现的位置
int indexOf(int ch, int fromIndex); //从fromIndex指定位置开始,获取ch在字符串中出现的位置
int indexOf(String str); //返回str在字符串中第一次出现的位置
int indexOf(String str, int fromIndex); //从fromIndex指定位置开始,获取str在字符串中出现的位置
/**如果在字符串中没有找到该ch或str,则返回-1**/
1.4.反向索引一个字符出现位置(字符串存入内存时,就存在角标)
int lastIndexOf(String str); //从字符串的后面找起
1.5.指定字符串位置中的字符的ASCII码
int codePointAt(int index); //返回指定字符串位置中的字符的ASCII码值
2、判断:
2.1.字符串中是否包含某一个字串
boolean contains(str);
特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1,表示str不在字符串中存在。所以,也可以用于指定判断是否包含。if(str.indexOf("aa")!=-1)
该方法即可以判断是否包含,又可以获取出现在的位置。如果只是要判断是否包含,就用contains()
2.2字符串中是否有内容
boolean isEmpty(); //原理:判断长度是否为0
2.3.字符串是否以指定的内容开头
boolean startsWith(str);
2.4.字符串是否以指定的内容结尾
boolean endsWith(str);
实战案例:判断文件是否是Array开头,.java结尾,并且中文名中包含Demo的文件。
2.5.判断字符串内容是否相同
boolean equals(str);
2.6.判断内容是否相同,并忽略大小写
boolean equalsIgnoreCase(str); //'一阔儿死 衣格诺 克死
3、转换:
3.1.将字符数组转成字符串
3.1.1 构造方法:
String(char[]); //将char数组转成字符串
String(char[], offset, count); //将char数组中的一部分转成字符串,offset第几位开始,count往后几位
/** 案例1:
char[] arr={'a','b','c','d','e','f','g'};
String s =new String(arr);
System.out.println("s="+s); //返回:s=abcdefg
案例2:
char[] arr={'a','b','c','d','e','f','g'};
String s =new String(arr,1,3);
System.out.println("s="+s); //返回:s=bcd
**/
3.1.2 静态方法:
static String copyValueOf(char[]);
static String copyValueOf(char[] data, int offset, int count);
static String valueOf(char[]);
/** 案例:
char[] arr={'a','b','c','d','e','f','g'};
String a=String.copyValueOf(arr);
//返回:abcdefg
**/
3.2.将字符串转成字符数组
char[] toCharArray();
/** 案例:
String str="abd dfsdof@43";
char[] arrc=str.toCharArray();
//遍历char[],在此省略。
**/
3.3将字节数组转成字符串
String(byte[]);
String(byte[], offset, count); //将字节数组中的一部分转成字符串
3.4.将字符串转成字节数组
byte[] getBytes();
3.5.将基本数据类型转成字符串
static String valueOf(int);
static String valueOf(double);
/** 案例:转字符串
3+"";
String.valueOf(3);
//2种相同,第一种常用,第二种专业
**/
4、替换:
String replace(oldchar, newchar);
String replace(oldstr, newstr);
/** 如果要替换的字符不存在,返回的还是原来的字符串 **/
5、切割:
String[] split(regex);
6、子串:(获取字符串中的一部分)
String substring(begin);
String substring(begin, end);
/** 字符第一位是0; 包含头,不包含尾; 如果角标不存在,会出现字符串角标越界异常 **/
/** 案例1:获取整个字符串:
String str="abcdefg";
//方法一:
String stra=str.substring(0, str.length()-1);
//方法二:
String strb=str.substring(0);
**/
7、转换、去空格、比较、连接、格式
7.1. 将字符串转成大写或小写
String toUpperCase();
String toLowerCase();
7.2. 将字符串两端的空格去除
String trim(); //trim('倾慕)整齐,修剪
7.3. 对两个字符串进行自然顺序的比较
int compareTo();
/** 逐个比较ASCII码值:大于返回一个>=1的值;等于返回0;小于返回-1 **/
7.4. 对两个字符串进行连接
String concat(str);
四、字符串格式占位符
String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。
转换符 说明 示例
%s 字符串类型 "abc"
%c 字符类型 'a'
%b 布尔型
%d 十进制
%f 浮点型
%% 百分比
%n 换行符
%tx 日期与时间类型(x代表不同的日期与时间转换符)
String str=String.format("Hi,%s:%s.%s", "王南","王力","王张");