目录
API概述
案例:键盘录入字符串
需求:按照帮助文档中的使用步骤学习Scanner类的使用,并实现键盘录入一个字符串,最后输出在控制台。
package top.djzxdx.demo1206;
import java.util.Scanner;
public class DemoScanner {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入:");
int i = sc.nextInt();
System.out.println("请输入:");
String next = sc.next();
System.out.println(i);
System.out.println(next);
}
}
注意:当nextInt();和nextLine();一起用的时候,会出现nextLine没有机会执行的情况,建议此时把nextLine方法换成next方法。这种问题只会发生在控制台中键盘输入的情况下,实际今后项目上都是web开发,通过网页执行的,则不会发生这种问题,因此无需担心。
String 概述
String类的常见构造方法
创建字符串对象的区别
常量池中有的变量不会重新创建,所以内存地址相同,返回true;但new出来的创建的字符串对象,默认在堆内存中,内存地址不一样,所以返回false。
String常见的面试题
字符串的比较
package top.djzxdx.stringmethod;
public class Demo1Equals {
public static void main(String[] args) {
String s1 = “abc”;
String s2 = “ABC”;
String s3 = “abc”;
System.out.println(s1.equals(s2)); //false
System.out.println(s1.equals(s3)); //true
System.out.println(s1.equalsIgnoreCase(s2)); //true
}
}
案例:用户登录
需求:已知一个用户的用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录失败给出提示:用户名密码不正确,请重试;登录成功之后,给出提示:登录成功。
思路:
1、定义2个String 类型的变量a和b,分别存储用户名和密码。
2、再定义1个sc1用于接收键盘输入的用户名,1个sc2用于接收键盘输入的密码;
3、写一个for循环,用于控制次数。
4、if语句判断如果a.equals© && b.equals(d),则登录成功,然后break;else:用户名密码不正确,请重新输入。
package top.djzxdx.logintest;
import java.util.Scanner;
public class LoginTest {
public static void main(String[] args) {
String a = "username";
String b = "password";
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= 3; i++) {
System.out.println("请输入用户名:");
String c = sc.nextLine();
System.out.println("请输入密码:");
String d = sc.nextLine();
if (a.equals(c) && b.equals(d)) {
System.out.println("登录成功");
break;
} else {
if (i < 3) {
System.out.println("用户名或密码不正确,请重新输入!" + "您还剩余" + (3 - i) + "次机会");
} else {
System.out.println("您输错了3次,明天再试吧!");
}
}
}
}
}
遍历字符串
package top.djzxdx.forstring;
import java.util.Scanner;
public class ForString {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.nextLine();
for (int i = 0; i < str.length(); i++) {
System.out.print(str.charAt(i) + " ");
}
}
}
package top.djzxdx.tochararray;
import java.util.Scanner;
public class ToCharArray {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String str = sc.nextLine();
char[] arr = str.toCharArray();
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
}
package top.djzxdx.test4;
import java.util.Scanner;
public class Test4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.nextLine();
int d = 0, x = 0, sz = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= 'A' && c <= 'Z') {
d++;
} else if (c >= 'a' && c <= 'z') {
x++;
}else if (c >= '0' && c <= '9') {
sz++;
}else{
continue;
}
}
System.out.println("您输入的字符中,大写字母有"+d+"个,小写字母有"+x+"个,数字有"+sz+"个。");
}
}
案例:手机号屏蔽——字符串截取方法
需求:以字符串的形式从键盘接收1个手机号,将中间四位号码屏蔽。
最终效果:156****1234
第一种实现代码(不使用字符串截取方法):
package top.djzxdx.phonenum;
import java.util.Scanner;
public class PhoneNum {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
one:
while (true) {
System.out.println("请输入一个手机号:");
String s = sc.nextLine();
if (s.length() < 11 || s.length() > 11) {
System.out.println("您输入的手机号位数不正确,请重新输入:");
continue;
} else {
String snew = "";
char[] chars = s.toCharArray();
for (int j = 0; j < chars.length; j++) {
if (chars[j] < '0' || chars[j] > '9') {
System.out.println("您输入的手机号含有非法字符,请重新输入");
continue one;
}
}
for (int i = 0; i < 3; i++) {
snew = snew + chars[i];
}
snew = snew + "****";
for (int i = 7; i < 11; i++) {
snew = snew + chars[i];
}
System.out.println("隐藏后的手机号码为:" + snew);
break one;
}
}
}
}
第二种实现方法(使用substring截取方法):
package top.djzxdx.phonenum;
import java.util.Scanner;
public class PhoneNumSubstring {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
one:
while (true) {
System.out.println("请输入一个手机号:");
String s = sc.nextLine();
if (s.length() < 11 || s.length() > 11) {
System.out.println("您输入的手机号位数不正确,请重新输入:");
continue;
} else {
// String snew = "";
char[] chars = s.toCharArray();
for (int j = 0; j < chars.length; j++) {
if (chars[j] < '0' || chars[j] > '9') {
System.out.println("您输入的手机号含有非法字符,请重新输入");
continue one;
}
}
String q = s.substring(0, 3);
String h = s.substring(7);
System.out.println("隐藏后的手机号码为:" + q + "****" + h);
break one;
}
}
}
}
截取方法的使用说明:
案例:敏感词替换——字符串替换
package top.djzxdx.replace;
import java.util.Scanner;
public class DemoReplace {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String s = sc.nextLine();
String yc = s.replace("TMD", "***");
System.out.println(yc);
}
}
切割字符串
需求:以字符串的形式从键盘录入学生信息,例如:“张三,23”,从该字符串中切割出有效数据,封装为Student学生对象。
用于封装数据的类,都会新建一个包,包名叫domain,把用于封装数据的类都放到domain下。
package top.djzxdx.domain;
public class Student {
private String name;
private String age;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public Student(String name, String age) {
this.name = name;
this.age = age;
}
}
package top.djzxdx.test5;
import top.djzxdx.domain.Student;
import java.util.Scanner;
public class StudentTest5 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入学生的姓名和年龄,用逗号隔开:");
String s = sc.nextLine();
String[] arrs = s.split(",");
Student stu = new Student(arrs[0], arrs[1]);
System.out.println(stu.getName() + "..." + stu.getAge());
}
}
String方法小结