diff --git "a/54.\345\217\266\345\255\220\350\261\252/\344\275\234\344\270\2324.md" "b/54.\345\217\266\345\255\220\350\261\252/\344\275\234\344\270\2324.md" index 7074a0503d0b458acc0a0c85eb90cfa769fc33bc..5f681941a37f8aa29f85e839cb99b996ce9afeba 100644 --- "a/54.\345\217\266\345\255\220\350\261\252/\344\275\234\344\270\2324.md" +++ "b/54.\345\217\266\345\255\220\350\261\252/\344\275\234\344\270\2324.md" @@ -39,6 +39,7 @@ public void setId(int id){ return "第" + id + "个员工的编号:" + id + ", 姓名:" + name + ", 年龄:" + age + ", 薪资:" + money; } } + ``` ```java diff --git "a/54.\345\217\266\345\255\220\350\261\252/\344\275\234\344\270\2325.md" "b/54.\345\217\266\345\255\220\350\261\252/\344\275\234\344\270\2325.md" new file mode 100644 index 0000000000000000000000000000000000000000..7195ada9cbfd3972ca2ceedd283ed5222f539031 --- /dev/null +++ "b/54.\345\217\266\345\255\220\350\261\252/\344\275\234\344\270\2325.md" @@ -0,0 +1,299 @@ +需求:已知用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后,给出相应的提示 + +思路: + +①已知用户名和密码,定义两个字符串表示即可 + +②键盘录入要登录的用户名和密码,用 **Scanner** 实现 + +③拿键盘录入的用户名、密码和已知的用户名、密码进行比较,给出相应的提示。字符串的内容比较,用**equals()** 方法实现 + +④用循环实现多次机会,这里的次数明确,采用**for**循环实现,并在登录成功的时候,使用**break**结束循环 + +```java +import java.util.Scanner; + +public class zy25 { + public static void main(String[] args) { + String password="123456"; + for (int i = 0; i < 3; i++) { + Scanner sc = new Scanner(System.in); + System.out.println("输入密码,你还有"+(3-i)+"次机会"); + String mm= sc.next(); + if (password.equals(mm)){ + System.out.println("密码正确!"); + break; + } + } + + } +} +``` + +**遍历字符串** + +需求:键盘录入一个字符串,使用程序实现在控制台遍历该字符串 + +思路: + +①键盘录入一个字符串,用 Scanner 实现 + +②遍历字符串,首先要能够获取到字符串中的每一个字符 + +public char charAt(int index):返回指定索引处的char值,字符串的索引也是从0开始的 + +③遍历字符串,其次要能够获取到字符串的长度 + +public int **length()**:返回此字符串的长度 + +数组的长度:数组名.length + +字符串的长度:字符串对象.length() + +④遍历 + +```java +for(int i=0; i='A' && ch<='Z' + +小写字母: ch>='a' && ch<='z' + +数字: ch>='0' && ch<='9' + +⑤输出三种类型的字符个数 + +```java +import java.util.Scanner; +public class zy27 { + public static void main(String[] args) { + Scanner sc=new Scanner(System.in); + System.out.print("请输入一串字符:"); + String a=sc.next(); + char aa[]=a.toCharArray(); + int n1=0; + int n2=0; + int n3=0; + for (int i = 0; i < aa.length; i++) { + if (aa[i]>='A' && aa[i]<='Z'){ + n1++; + } + if (aa[i]>='a' && aa[i]<='z'){ + n2++; + } + if (aa[i]>='0' && aa[i]<='9'){ + n3++; + } + } + System.out.println("大写字母有:"+n1+"个"); + System.out.println("小写字母有:"+n2+"个"); + System.out.println("数字有:"+n3+"个"); +} +} +``` + +**手机号屏蔽** + +需求:以字符串的形式从键盘接受一个手机号,将中间四位号码屏蔽 + +最终效果为:156****1234 + +思路: + +①键盘录入一个字符串,用 Scanner 实现 + +②截取字符串前三位 + +String substring(int beginIndex, int endIndex) :从beginIndex索引位置开始截取,截取到endIndex索引位置,得到新字符串并返回(包含头,不包含尾) + +String s1 = telString.substring(0,3); + +③截取字符串后四位 + +String substring(int beginIndex) : 从传入的索引位置处,向后截取,一直截取到末尾,得到新的字符串并返回 + +String s2 = telString.substring(7); + +④将截取后的两个字符串,中间加上****进行拼接,输出结果 + +```java +import java.util.Scanner; + +public class zy28 { + public static void main(String[] args) { + Scanner sc=new Scanner(System.in); + System.out.print("请输入一串手机号:"); + String b=sc.next(); + String a=b.substring(0,3); + String aa="****"; + String aaa=b.substring(7); + System.out.println(a+aa+aaa); + } + } +``` + +**敏感词替换** + +需求:键盘录入一个 字符串,如果字符串中包含(TMD),则使用***替换 + +思路: + +①键盘录入一个字符串,用 **Scanner** 实现 + +②替换敏感词 + +String replace(CharSequence target, CharSequence replacement) + +将当前字符串中的target (被替换的旧值 )内容,使用replacement (替换的新值) 进行替换 + +返回新的字符串 + +③输出结果 + +```java +import java.util.Scanner; + +public class zy29 { + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + System.out.println("请输入字符串"); + String s=sc.next(); + String str=s.replace("TMD","***"); + System.out.println(str); + } +} +``` + +**切割字符串** + +需求:以字符串的形式从键盘录入学生信息,例如:“张三 , 23”从该字符串中切割出有效数据 + +封装为Student学生对象 + +思路: + +①编写Student类,用于封装数据 + +②键盘录入一个字符串,用 Scanner 实现 + +③根据逗号切割字符串,得到(张三)(23) + +String[] split(String regex) :根据传入的字符串作为规则进行切割,将切割后的内容存入字符串数组中,并将字符串数组返回 + +④从得到的字符串数组中取出元素内容,通过Student类的有参构造方法封装为对象 + +⑤调用对象getXxx方法,取出数据并打印。 + +```java + +``` + + + + String (String类在java.lang包下,使用时不需要导包) + + String类代表字符串。 java程序中所有的双引号字符串,都是String类的对象。 + +字符串不可变,他们的值在创建后不能被更改。 + +创建字符串对象的区别对比 (==号做比较) + + 基本数据类型:比较的是具体的值。 + + 引用数据类型:比较的是地址的值。 + + 1.以双引号给出的字符串,只要字符序列相同(顺序和大小写),无论出现几次,都只会建立一个String对象,并在字符串常量池中维护。 + +``` + String s1 = "abc" + String s2 = "abc" + s1 == s2 + // 对 +``` + + 2.通过new创建的字符串对象,每一次new都会申请一个内存空间,内容相同,但是地址值不同。 + +``` + char [] chs = {'a','b','c'} + String s1 = new String (chs) + String s2 = new String (chs) + s1 == s2 + // 错 +``` + + 字符串常量池:当使用双引号创建字符串对象的时候,系统会检查该字符串是否在字符串常量池中存在。 + + 存在:创建 不存在:不会重新创建,而是直接复用。 + + 双引号创建的字符串对象,在字符串常量池中储存,通过构造方法创建的字符串对象,在堆内存中储存。 + +String字符串的特点: + + 1.java程序中所有的双引号字符串,都是String类的对象。 + + 2.字符串不可变,他们的值在创建后不能被更改。 + + 3.虽然String的值是不可变的,但是他们可以被共享。 + +当字符串之间使用+ 号串联(拼接)的时候,系统底层会自动创建一个StringBuilder对象,然后在调用其append方法完成拼接,拼接后,在调用其toString方法转换为String类型。 + +java存在常量优化机制,在编译的时候,会将"a" + "b" + "c" 拼接为"abc" + +字符串的比较: + + 字符串是对象,她比较内容是否相同,是通过一个方法来实现的,这个方法叫做:equals() + + 比如:要判断a是否等于b a.equals(b) + +将此字符串与指定对象进行比较。由于比较的是字符串对象,所以参数直接传递一个字符串。 + +将字符串拆分为字符数组: + + char [] toCharArray (); 将当前字符串拆分为字符数组并返回; + +截取字符串: + + String.substring(x,x); + +例:截取字符串前三位: String s1 = xxx.substring(0,3); + +敏感词替换: + + String.replace(旧值,新值); + +切割字符串: + + String [] split (string regex); + +根据传入的字符串作为规则进行切割,将切割的内容存入字符串数组中,并将字符串数组返回。 \ No newline at end of file