目录
1.Scanner的概述和构造方法原理:
2.Scanner的hasNextXXX()方法和nextInt()方法
3.获取数据出现的小问题
4.String类的概述
5.String类的构造方法
6.String的特点一旦被赋值就不再改变
7.String字面值对象和构造方法创建对象的区别
8.String面试题
9.String类的判断功能
10.模拟用户登录
11. 10的断点测试
12. 用户登录案例之登陆成功后玩猜数字小游戏
13.断点测试
14.String类的获取功能
15.字符串的遍历
16.统计字符串中大写、小写、数字字符的个数
17.断点测试
18.String 类的转换功能
19.练习,把一个字符串首字母大写,其余小写
20.String的其他功能
21.20中的小问题
22.把int数组按指定格式拼接为字符串
23.使用功能改进22
24.字符串反转案例
25.大的字符串中找小字符串出现的次数
26.在大的字符串中查找小字符串出现的次数代码案例
27.26中代码的改进优化
28.断点测试
29.总结
这里sc对象使用的构造方法是Scanner(InputStream source)而system类中的静态成员变量就是inputStream类型的。所以构造方法使用是 Scanner sc = new Scanner(System.in);
字符串的值意思是,字符串被创建后,字符串本身不会发生改变,而指向它的某个对象,是可以改变的。
对于String s = ""; 对象s是存在的,内容为空,可以调用s的方法。
对于String s = null; 对象s是不存在的,对象为空,不能调用s的方法。
注意,对于对象不存在的时候却调用了方法,会出现空指针异常。
package cn.itcast_test;
import java.util.Scanner;
public class LoginTest {
public static void main(String[] args) {
//定义写死的账号的用户名和密码
String username = "admin";
String password = "123456";
//要求最大允许的登录失败次数为3,循环次数明确,使用for循环。
for (int i = 0; i < 3; i++) {
//使用scanner获取用户输入的用户名和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String une = sc.nextLine();
System.out.println("请输入密码");
String pwd = sc.nextLine();
//使用if,else语句判断字符串是否匹配
if (une.equals(username) && pwd.equals(password)) {
System.out.println("登陆成功");
//登陆成功使用break跳出循环
break;
} else {
//登陆失败时提示用户
if (i == 2) {
//最后一次提示与前两次不同
System.out.println("您登录失败次数过多,已冻结。");
} else {
//利用for循环中i的值来提示用户剩余可用的登录次数
System.out.println("登陆失败,您还有" + (2 - i) + "次机会。");
}
}
}
}
}
在main左侧这里点一下使用debug模式调试就可以进行断点测试
GuessNubmerGame类。
package cn.itcast_test;
import java.util.Scanner;
public class GuessNumberGame {
private GuessNumberGame() {
}
public static void start() {
//定义随机数1-100
int number = (int) (Math.random() * 100 + 1);
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数来猜数字(1-100)。");
//猜数字的次数不明确,因此用while循环。
//这里不必将创建scanner对象和游戏前的输出语句包含到while下
//只将 int GN = sc.nextInt();包含进去即可
while (true) {
int GN = sc.nextInt();
//判断
if (GN > number) {
System.out.println("您输入的数字过大,请重新输入。");
} else if (GN < number) {
System.out.println("您输入的数字过小,请重新输入。");
} else {//若一致提示猜对了,使用break跳出循环,结束游戏。
System.out.println("恭喜您,猜对了!");
break;
}
}
}
}
LoginTest类。
package cn.itcast_test;
import java.util.Scanner;
public class LoginTest {
public static void main(String[] args) {
//定义写死的账号的用户名和密码
String username = "admin";
String password = "123456";
//要求最大允许的登录失败次数为3,循环次数明确,使用for循环。
for (int i = 0; i < 3; i++) {
//使用scanner获取用户输入的用户名和密码
Scanner sc = new Scanner(System.in);
System.out.println("请输入用户名");
String une = sc.nextLine();
System.out.println("请输入密码");
String pwd = sc.nextLine();
//使用if,else语句判断字符串是否匹配
if (une.equals(username) && pwd.equals(password)) {
System.out.println("登陆成功,您可以开始玩猜数字游戏了!");
//登陆成功使用break跳出循环
GuessNumberGame.start();
break;
} else {
//登陆失败时提示用户
if (i == 2) {
//最后一次提示与前两次不同
System.out.println("您登录失败次数过多,已冻结。");
} else {
//利用for循环中i的值来提示用户剩余可用的登录次数
System.out.println("登陆失败,您还有" + (2 - i) + "次机会。");
}
}
}
}
}
注意要在GuessNumberGame中的start方法也添加断点
使用链式编程优化
注意,使用比较时,是挨着比较,相同就看下一位,一旦有不同的字符,就用对应的 ASCII值相减,所以,返回值可能有负数、正数、0
对于这种前三个字符一样但长度不一样的两个字符串使用比较方法,通过查看源码可知,当前几位字符相同,但长度不同时,直接返回了字符串长度相减。
package cn.itcast_test;
import java.lang.module.FindException;
public class minString_count {
public static void main(String[] args) {
String maxString = "woaijavawoaijavawohenaijavajavajava";
String minString = "java";
System.out.println(minString+"在"+maxString+"中出现了"+getCount(maxString,minString)+"次。");
}
public static int getCount(String maxstr,String minstr){
int count = 0;
int index = maxstr.indexOf(minstr);
while(index!=-1){
count++;
maxstr = maxstr.substring(index+minstr.length());
index = maxstr.indexOf(minstr);
}
return count;
}
}
注意:while中的index = maxstr.indexOf(minstr)要用括号括起来,执行顺序是,索引,赋值,判断。
public static int getCount(String maxstr,String minstr){
int count = 0;
int index ;
while( (index=maxstr.indexOf(minstr)) != -1){
count++;
maxstr = maxstr.substring(index+minstr.length());
}
return count;
}
}