1、String字符串用于定义字符串对象。
直接定义字符串:直接赋值的字符串如果一样,那么一样的字符串会放入串池,下次如果还需要使用难么直接从串池中拿。
例:String str1="Hello world"; String str2="Hello world";
后面str2也是"Hello world"时,str1在赋值时已将字符串放入串池,再给str2赋相同的值时不会再开辟内存存放"Hello world",而是去串池中复用字符串"Hello world"。
2、通过new关键字在堆区开辟内存,存储字符串
例: String str2=new String("hello world");
就是在堆区开辟一块内存,用于存储字符串。就算内容一样,但只要用new就是在堆区开辟一块新的空间存储这个字符串。
3、直接赋值,没有字符串变量参与运算时,那么这两个变量时是恒等于的。
例:
String str1="abc"; String str2="a"+"b"+"c"; String str3="ab"; String str4=str3+"c"; /*输出true,str2给虚拟机编译之后就将字符串a,b,b合并到一起了,在运行之后,这个str1在赋值"abc",后就将"abc"放入串池,那么str2再赋值"abc"时,就是服用串池中的abc,因此比较的时候就是true*/ System.out.println(str1==str2); /*输出false,因为有变量参与运算,因为String本身就是一个对象,存放于堆区,有字符串变量参与运算时,那么就在堆区开辟了一块新的内存用以存放字符串。str4就是堆区的地址,因此与str1不同,食醋胡false。*/ System.out.println(str1==str4);
4、equals() 字符串比较
equals()方法是String的成员方法,String类型的所有变量都可以使用。作用就是比较两个String类型变量的内容是否一样。
例:str1.equals(str2) ,如果str1和str2的类容相同,那么返回的结果就是true。
5、length() 字符串长度
length()就是用于统计字符串的长度(即字符串中有多少个单个的字符)。
6、charAt(int index) 括号里面的是字符串的索引,整个方法会返回该字符串中这个索引对应的字符
例:str.charAt(0); //返回字符串str中0索引位置的字符
7、substring(int beginIndex,int endIndex) 截取
截取字符串中从beginIndex开始到endIndex(不包括endIndex这个索引的字符)结束的字符串。
substring(int beginIndex):默认截取从beginIndex开始到末尾的字符
8、replace(旧值,新值) 将字符串中出现的所有 旧值 替换成 新值。
练习
题1.输入字符串,对每个英文大小写字母统计并输出
//小写字母
for (int i = 0; i < 26; i++) { //遍历二十六个小写字母
int time = 0; //初始化出现的次数为0
for (int j = 0; j < str.length(); j++) { //遍历字符串
if (str.charAt(j) == (char) (i + 97)) {
//当字符串从头到尾,如果有字符等于97+i对应的字符时,这次数++。
//a对应的Ascll码为97,当i=0时,i+97仍然为97,然后转为字符类型就是 'a',再去比较是否相等,第一次的内层循环就是遍历字符串中’a'的个数,第二次循环就是遍统计'b'的个数,
time++;
}
}
System.out.println((char) (i + 97) + "有 " + time + "个");
}
//大写字母同理,但Ascll码要改为65。
题2.输入字符串,分别同届小写字母多少个,大写字母多少个,数字多少个
//通过ascll码去判断三种类型字符的区间,然后遍历字符串,当字符对应在哪个区间,那么对应类型的字符个数就+1
int capital = 0; //大写字母次数
int lowercase = 0; //小写字母次数
int number = 0; //数字次数
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch >= 'a' && ch <= 'z') {
lowercase++;
} else if (ch >= 'A' && ch <= 'Z') {
capital++;
} else if (ch >= '0' && ch <= '9') {
number++;
}
}
题3.敏感词替换
//将敏感词放入数组,然后遍历输入,将数组中出现的这个词全部替换成****
String str = scanner.nextLine();
String[] sensitive={"贱","TMD","SB","cnm"};
for (int i = 0; i < sensitive.length; i++) {
str=str.replace(sensitive[i],"*");
}
题4.以字符串形式输入电话号码,不通过length()来统计字符串长度
//初始定义长度length=0,在字符串后面添加一个电话号码不存在的字符,遍历字符串,如果不是这个特殊字符,那么长度++。但注意的是,必须在判断后面再次判断是否已经是特殊字符了,如果是那么跳出循环。
String phoneNumber = scanner.nextLine();
String tempPhoneNumber = phoneNumber + "%";
int length = 0; //定义长度
while (true) {
//如果字符不为添加的最后一个字符%,那么就往后移动依次比较
if (tempPhoneNumber.charAt(length) != '%') {
length++;
}
//倒数第二个不是,但length++之后,这个下标对应字符就是%,则结束循环
if (tempPhoneNumber.charAt(length) == '%') {
break;
}
}
6.验证邮箱地址
String emailStr = scanner.nextLine();
int time = 0; //定义@符号出现的次数
for (int i = 0; i < emailStr.length(); i++) {
if (emailStr.charAt(i) == '@') {
time++;
}
}
if (time == 1) {
int index = emailStr.indexOf("@");
if (index >= 6 && index <= 10) { //判断@符号出现的地方时候符合邮箱的格式
System.out.println("您输入的邮箱地址格式正确");
} else {
System.out.println("您输入的邮箱地址格式有误");
}
} else {
System.out.println("您输入的不是邮箱地址");
}
7.账户登录,设定初始账户和密码,限制登录错误的次数
String initialName = "admin"; //账户
String initialPassword = "123456"; //密码
for (int i = 0; i < 3; ) {
System.out.print("请输入用户名:");
String name = scanner.next();
System.out.print("请输入密码:");
String password = scanner.next();
if (name.equals(initialName) && password.equals(initialPassword)) {
System.out.println("登陆成功!");
break;
} else if (name.equals(initialName) && !password.equals(initialPassword)) {
System.out.println("密码错误!");
if (i == 2) {
System.out.println("登录已锁定,暂时无法登录!");
} else {
System.out.println("登录失败,您还有" + (2 - i) + "次机会!");
}
} else if (!name.equals(initialName) && password.equals(initialPassword)) {
System.out.println("用户名错误!");
} else {
System.out.println("用户名和密码错误!");
}
i++;
if (i==3){
System.out.println("您的登录次数已用完!");
break;
}
}
8.电话号码屏蔽
System.out.print("请输入电话号码:");
String str = scanner.next();
if (str.length() == 11) {
String middleStr = str.substring(3, 7);
str = str.replace(middleStr, "****");
System.out.println(str);
} else {
System.out.println("您输入的电话号码不合规!");
}