一、概述
1、修饰存放字符序列的变量的【是表现字符序列的一种形式】【描述字符序列的集合体】
2、所有的字符串常量都是String类的对象
3、所有的字符串常量jvm提前定义好的String对象存放在方法区的常量池中 可以直接拿来用
4、类中定义了操作字符串的相关功能
5、每一个字符串都是常量
6、Java中有两大类常量,一类为自定义常量(final关键字修饰),另一类为字面值常量,一共有六种(整数常量,小数常量,布尔常量,字符常量,字符串常量,空常量null),String就是其中一种
二、String类型的构造方法
1、String():
创建一个内容为空的字符串对象
String s1 = new String();
System.out.println(s1);// 啥也不输出
2、String(byte[] b):
创建一个内容为字节数组内容的字符串对象【可以把字节数组的内容变为字符串】
//构造一个String对象,将指定字节数组中的数据转化成字符串
byte [] bys = {97,98,99};
String s1 = new String(bys);
System.out.println("s1: "+s1); //abc
3、String(char[] c):
创建一个内容为字符数组内容的字符串对象【可以把字符数组的内容变为字符串】
//构造一个String对象,将指定字符数组中的数据转化成字符串
char[] c = {'a','b','c'};
String s2 = new String(c);
System.out.println(s2);
4、String(byte[] b , int starIndex,int length):
创建一个内容为字节数组中指定内容的字符串对象【可以把字节数组的指定内容变为字符串】
starIndex:指定内容开始的索引
length:转换的字节个数【长度,也就是需要转换几个】注意:不能超过数组的长度 – 开始的索引值【starIndex】
byte[] b2 = {97,98,99,100,101,102,103};
String s3 = new String(b2, 2, 4); //参数列表分别为字节数组、开始索引、转换的字节个数
System.out.println(s3); //cdef
5、String(char[] b , int starIndex,int length):
创建一个内容为字符数组中指定内容的字符串对象【可以把字符数组的指定内容变为字符串】
starIndex:指定内容开始的索引
length:转换的字节个数【长度】注意:不能超过数组的长度-开始的索引值【starIndex】
char[] c2 = {'a','b','c','d','e','f'};
String s4 = new String(c2, 1, 3); //从索引为1开始截取三个
System.out.println(s4); //bcd
6、String(String s):
创建一个内容为字符串s的新的字符串对象
String s5 = "java";
String s6 = new String(s5);
System.out.println(s5 == s6); //返回false,说明新建了一个对象,两个对象不同,
创建字符串对象的方式有:
1、构造方法创建
String s = new String( );
2、直接赋值法【常用】
String s = "";
区别:
构造方法创建对象调用构造方法需要 在堆空间开辟新的内存空间 出来存放字符串的内容。【String的变量指向堆空间的对象空间的】
直接赋值法赋值的是字符串常量,字符串常量提前创建好的 存在于常量池 不需要去堆空间开辟对象空间【String的变量直接指向了方法区的常量池】
三、String的常用功能
1、String类型的判断功能
(判断功能有返回值,返回值是boolean类型的)
1.1、equals(String s):
比较两个字符串内容是否一致
String中这个方法已经重写,所以比较的的属性值
String s1 = "abcdefg";
String s2 = new String(s1);
//比较两个字符串内容是否一致、
System.out.println(s1.equals(s2)); //true String中这个方法已经重写,所以比较的的属性值
1.2、equalsIgnoreCase(String s):
忽略大小写比较两个字符串对象的内容是否一致
String s1 = "abcdefg";
String s2 = "abCDEfg";
System.out.println(s1.equalsIgnoreCase(s2)); //true
1.3、contains(String s):
判断调用字符串对象中是否包含指定的字符串
String s1 = "abcdefg";
System.out.println(s1.contains("c")); //true
1.4、startsWith(String s):
判断调用字符串对象是否以指定的字符串开始
String s1 = "abcdefg";
System.out.println(s1.startsWith("b")); //false
System.out.println(s1.startsWith("a")); //true
1.5、endsWith(String s):
判断调用字符串对象是否以指定的字符串结尾
String s1 = "abcdefg";
System.out.println(s1.endsWith("g")); //true
System.out.println(s1.endsWith("fg")); //true
System.out.println(s1.endsWith("f")); //fasle
1.6、isEmpty():
判断调用的字符串对象的内容是否为空
String s1 = "abcdefg";
System.out.println(s1.isEmpty()); //false
判断功能练习【练习】
模拟用户登录:
正确用户名是admin,密码是123
键盘录入用户名和密码,一共有三次机会,如果录入错误,前两次提示还有几次机会
最后一次提示“登录机会已经用完”
录入正确,提示“登录成功”
代码示例
import java.util.Scanner;
public class LoginDemo {
public static void main(String[] args) {
//定义变量
String userName = "admin"; //用户名
int passWord = 123; //密码
System.out.println("您一次有三次登录机会");
//创建键盘录入对象
Scanner scanner = new Scanner(System.in);
//定义循环
for (int i = 0; i < 4; i++) {
//录入用户名
System.out.println("请输入用户名: ");
String userName2 = scanner.next();
//录入密码
System.out.println("请输入密码: ");
int passWord2 = scanner.nextInt();
//equals对比时候,把要录入的内容放后边,可以避免没有输入内容时候的空指针异常
if (userName.equals(userName2) && passWord2 == passWord) {
System.out.println("登录成功");
break;
}else {
判断剩余次数
if(i == 2) {
System.out.println("登录次数已用完,结束登录!!");
break;
}else {
System.out.println("输入有误,还有" + (2-i) + "次机会");
}
}
}
}
}
2、String类型的获取功能
2.1、length():
获取字符串的长度
String s1 = "abcdefg";
System.out.println(s1.length()); //7
2.2、charAt(int index):
获取指定索引位置的字符
String s1 = "abcdefg";
System.out.println(s1.charAt(2)); //c
2.3、substring(int index):
从指定索引开始截取字符串到结尾的内容
String s1 = "abcdefg";
System.out.println(s1.substring(1)); //bcdefg
2.4、substring(int startIndex,int endIndex):
从指定索引开始截取字符串到指定的索引位置结束的内容
【截取的原则:含头不含尾】
String s1 = "abcdefg";
System.out.println(s1.substring(1, 5)); //bcde
indexOf()家族:>默认从左往右找
2.5、indexOf(int char):
返回字符串中指定字符元素第一次出现的索引值
String s1 = "abcabc";
System.out.println(s1.indexOf('c')); //2
System.out.println(s1.indexOf('f'));//访问不存在的返回-1
2.6、indexOf(int char,int startIndex):
返回字符串中指定索引后内容中指定字符元素第一次出现的索引值
String s1 = "abcabc";
System.out.println(s1.indexOf('b', 3)); //4
System.out.println(s1.indexOf('b', 5));//查询不到返回-1
System.out.println(s1.indexOf('b', 7));//给的查询位置超出字符串索引返回-1
2.7、indexOf(String s):
返回字符串中指定字符串元素第一次出现的索引值
String s1 = "abcabc";
System.out.println(s1.indexOf("bc")); //1
2.8、indexOf(String s,int startIndex):
返回字符串中指定索引后内容中指定字符串元素第一次出现的索引值
String s1 = "abcabc";
System.out.println(s1.indexOf("bc", 4));//4
System.out.println(s1.indexOf("bc", 5));//查询不到返回-1
System.out.println(s1.indexOf("bc", 7));//给的查询位置超出字符串索引返回-1
lastIndexOf()家族:
原理和indexOf家族原理一样,只不过查找的顺序是从右往左找方法的练习,返回的索引还是正常索引
3、String类型的转换功能
3.1、getBytes():
把字符串变成字节数组
String s1 = "ilovejava";
//转换为字节数组
byte[] bs = s1.getBytes();
//打印数组内容
System.out.println(Arrays.toString(bs));
3.2、toCharArray():
把字符串变成字符数组
String s1 = "ilovejava";
//把字符串变成字符数组
char[] ch = s1.toCharArray();
System.out.println(Arrays.toString(ch)); //[i, l, o, v, e, j, a, v, a]
String string = "123456"; //把字符串变成char类型数组
char[] ch = string.toCharArray();
System.out.println(ch); //123456
System.out.println(Arrays.toString(ch)); //[1, 2, 3, 4, 5, 6]
3.3、toUpperCase():
把字符串的内容全部变为大写
String s1 = "ilovejava";
//把字符串的内容全部变为大写
System.out.println(s1.toUpperCase()); //ILOVEJAVA
3.4、toLowerCase():
把字符串的内容全部变为小写
String s1 = "ILOVEJAVA";
//把字符串的内容全部变为小写
System.out.println(s1.toLowerCase());//ilovejava
3.5、concat(String s2):
拼接两个字符串的内容为一个字符串【效果和+一样的】
谁在前边,输出的时候就在前边
String s1 = "ILOVEJAVA";
String s2 = "ilovejava";
System.out.println(s1.concat(s2)); //ILOVEJAVAilovejava
System.out.println(s2.concat(s1)); //ilovejavaILOVEJAVA
练习
键盘录入一个大小写混杂的纯英文字符串
将字符串转换成首字母大写,其他字母全部小写
例如,键盘录入”i lOvE jAvA”,转换成 “I love java”
import java.util.Scanner;
public class Demo {
public static void main(String[] args) {
//键盘录入
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串");
String s = scanner.nextLine();
//获取首字母
//方式一、获取首字母,此时为字符,需要转换为字符串,然后转换为大写
String s1 = String.valueOf(s.charAt(0)).toUpperCase();
//方式二、获取首字母并大写
String s2 = s.substring(0,1).toUpperCase();
//获取剩下的字符串,并全部小写
String s3 = s.substring(1).toLowerCase();
//拼接字符 串
String concat = s1.concat(s3);
String concat2 = s2.concat(s3);
//拼接字符串并输出
System.out.println(concat);
System.out.println(concat2);
System.out.println("方式一");
System.out.println(s1 + s3);
System.out.println("方式二");
System.out.println(s2 + s3);
}
}
4 、String类型的其他方法
4.1、replace(String oldStr,String newStr):
使用指定的newStr替换调用字符串对象中的oldStr内容
String s1 = "javajava";
//替换指定内容
String s2 = s1.replace("a", "b");
System.out.println(s2); //jbvbjbvb
4.1、trim():
去除字符串首尾空白内容的
String s3 = " java java ";
System.out.println(s3.length()); //去除之前字符串长度 16
//去除字符串首尾空白内容的
String s4 = s3.trim();
System.out.println(s4.length()); //去除之后字符串长度 9
System.out.println(s4); //java java,两端空格已经没有