当前位置: 代码迷 >> 综合 >> Java&day08
  详细解决方案

Java&day08

热度:9   发布时间:2024-02-06 15:57:21.0

1.Scanner的方法补充

nextLine()的缺点:nextLine()方法前面不能出现其他的键盘输入方法next()的缺点:不能接受空格和回车
import java.util.Scanner;public class Test01 {public static void main(String[] args) {//补充Scanner的方法//创建对象Scanner sc = new Scanner(System.in);System.out.println("请输入一个整数:");int i = sc.nextInt();System.out.println(i);System.out.println("请输入一个字符串:");String s2 = sc.nextLine();    //此时这个字符串的输入会被跳过!System.out.println(s2);}
}

2.String类

1.String类的介绍

? String所在的包是java.lang包,java.lang包下的所有类在使用时都不需要导包。

? String代表字符串类,所有的字符串字面值比如"abc" 他们都是字符串的对象

2.构造方法

方法 说明
new String(String s) 把字符串变成字符串
new String(char[] chs) 把字符数组变成字符串
new String(byte[] bys) 把字节数组变成字符串
new String(byte[] bys,int index, int len) 把字节数组的一部分变成字符串
String s = “字符串”; 字符串直接赋值
public class Test02 {//String类在打印时不会出现地址值,会出现直接的内容public static void main(String[] args) {//String的构造方法//new String(String s)String s1 = new String("abc");System.out.println(s1);             //abc//new String(char[] chs)char[] arr = {'a','b','c','d'};String s2 = new String(arr);System.out.println(s2);             //abcd//new String(byte[] bys)byte[] brr = {100,101,102,103};String s3 = new String(brr);System.out.println(s3);             //defg//转换字节数组或字符数组的一部分//第二个参数代表开始索引,第三个参数代表的是个数String s4 = new String(arr,1,2);System.out.println(s4);             //bc//简单创建字符串String s5 = "abc";System.out.println(s5);             //abc}
}

3.创建对象方式的区别

==号:

? 在比较基本类型时比较的是值是否相同

? 在比较引用类型时比较的是地址值是否相同

在这里插入图片描述

4.字符串的常用方法

方法 说明
equals() 判断字符串的内容是否相同
charAt() 获取某个索引处的字符
length() 获取字符串的长度

5.登陆案例

import java.util.Scanner;
public class Test05 {public static void main(String[] args) {//登陆案例//1.固定记录一个正确的用户名和密码String username = "柳岩";String password = "123456";//2.让用户输入用户名和密码Scanner sc = new Scanner(System.in);//循环for (int i = 0; i < 3; i++) {System.out.println("请输入用户名:");String user = sc.nextLine();System.out.println("请输入密码:");String pass = sc.nextLine();//3.判断是否相同if(username.equals(user) && password.equals(pass)){//4.如果相同登陆成功System.out.println("登陆成功");//结束循环break;}else {//5.如果输入错误3次就提示账号锁定if(i == 2){System.out.println("账号锁定,请联系管理员");}else{//6.如果错误就再次输入System.out.println("用户名或密码错误,请重新输入");}}}}
}

6.字符串的遍历

public class Test06 {public static void main(String[] args) {//字符串String s = "我家床榻了能去你家睡么";//遍历for(int i=0; i<s.length(); i++){char ch = s.charAt(i);System.out.println(ch);}//快捷键//s.length().fori}
}

7.统计字符串中字符的出现次数

import java.util.Scanner;public class Test07 {// 键盘输入一个字符串// 统计其中大写字母的个数// 小写字母的个数// 数字的个数public static void main(String[] args) {//键盘输入Scanner sc = new Scanner(System.in);System.out.println("请输入一个字符串");String s = sc.nextLine();//定义三个变量int count1 = 0;int count2 = 0;int count3 = 0;//遍历字符串for (int i = 0; i < s.length(); i++) {//获取每个字符char ch = s.charAt(i);//判断if(ch>='A' && ch<='Z'){//大写名字count1++;}else if(ch>='a' && ch<='z'){//小写字母count2++;}else if(ch>='0' && ch<='9'){count3++;}}//打印System.out.println("大写字母" + count1);System.out.println("小写字母" + count2);System.out.println("数字" + count3);}
}

8.把数组拼接成一个字符串

public class Test08 {public static void main(String[] args) {//创建数组int[] arr = {11,22,33,44,55,66};//调用方法String s = pinJie(arr);System.out.println(s);}//定义方法:把数组拼接成字符串public static String pinJie(int[] arr){//创建字符串String s = "[";//遍历数组for (int i = 0; i < arr.length; i++) {if(i == arr.length-1){s += arr[i];            //s = s + arr[i];}else{s += arr[i];s += " ";}}//拼接后括号s += "]";return s;}
}

3.StringBuilder类

String是不可变的,一旦创建不能修改,StringBuilder叫字符串缓冲区,是一个可变的字符串。

1.构造方法

方法 说明
new StringBuilder() 创建一个空的StringBuilder对象
new StringBuilder(String s) 把字符串转成StringBuilder对象
public class Test01 {//StringBuilder的构造方法public static void main(String[] args) {StringBuilder sb = new StringBuilder();System.out.println(sb);    //虽然是引用类型,虽然sb里面保存的是地址值,但是他打印的不是地址值,而是他的内容StringBuilder sb2 = new StringBuilder("abc");System.out.println(sb2);  //abc}
}

2.StringBuilder的常用方法

方法 说明
append() 给StringBuilder追加内容
reverse() 反转StringBuilder的内容
toString() 把StringBuilder类型转成String类型
public class Test02 {public static void main(String[] args) {//创建对象StringBuilder sb = new StringBuilder("abc");//append()可以把任意类型追加到内容的后面sb.append(true);sb.append("柳岩");sb.append(36);//链式编程(写熟了之后可以用)sb.append(true).append("abc").append(123);System.out.println("反转前" + sb);//反转(不需要传参也不需要接受返回值 把自己本身给反转了)sb.reverse();System.out.println("反转后" + sb);//toString():转成String类型String s = sb.toString();System.out.println(s);}
}

3.String和StringBuilder的互相转换

虽然String和StringBuilder看起来很像,但是不是同一种类型。
调用方法需要用对应的类型,比如String类有startsWith()比如StringBuilder有reverse()方法String-->StringBuildernew StringBuilder(String s);StringBuilder-->StringString s = sb.toSring();

4.StringBuilder的好处

SringBuilder因为对象的内容是可变的,所以在修改时执行速度快,在做大量的字符串拼接时就建议使用StringBuilder来完成。

public class Test03 {public static void main(String[] args) {//String是不可变的String s = "";//获取执行但当前代码的系统时间long time1 = System.currentTimeMillis();for (int i = 0; i < 100000; i++) {s += "a";}long time2 = System.currentTimeMillis();System.out.println("String :" + (time2-time1));   //5736毫秒System.out.println(s);//StringBuilder是可变的StringBuilder sb = new StringBuilder();long time3 = System.currentTimeMillis();for (int i = 0; i < 100000; i++) {sb.append("a");}long time4 = System.currentTimeMillis();System.out.println("StringBuilder:" + (time4-time3));  //2毫秒System.out.println(sb);}
}

5.StringBuilder完成数组的拼接

public class Test04 {public static void main(String[] args) {//创建数组int[] arr = {11,22,33,44,55,66};//调用方法String s = pinJie(arr);System.out.println(s);}//调用方法:把数组拼接成字符串public static String pinJie(int[] arr){//StringBuilderStringBuilder sb = new StringBuilder("[");//遍历数组for (int i = 0; i < arr.length; i++) {if(i==arr.length-1){sb.append(arr[i]);}else{sb.append(arr[i]);sb.append(" ");}}sb.append("]");String s = sb.toString();return s;}
}

4.总结

String是java中最常用的类,多练习StringBuilder一般不用,只有在大量拼接时候才用

在这里插入图片描述

字符串对象通过构造方法创建和直接赋值的区别String s = new String("abc");new的对象存储在堆内存中,每次new都会创建一个新的对象String s1 = "abc";String s2 = "abc";直接创建在常量池中,常量池中相同的对象只能存储一次字符串的方法:判断两个字符串是否相同:equals()通过索引获取字符:charAt()获取字符串的长度:length()类中的常用方法必须记住,使用一个类其实就是在使用他的方法。String和StringBuilder的相互转换:String-->StringBuilder:new StringBuilder("abc");StringBuilder-->String:String s = sb.toString();StringBuilder的方法:append():   拼接追加任何数据类型 (拼接执行速度快)reverse():  内容的反转toString(): 转成String类型
  相关解决方案