字符串的案例 A:模拟用户登录 B:字符串的遍历 C:统计字符串中大写、小写及数字字符的个数 D:把字符串的首字母转成大写,其他转成小写 E:把int数组拼接成一个指定格式的字符串输出 F:字符串反转 G:统计大串中小串出现的次数
A:模拟用户登录
1 package cn.itcast_03;
2
3 import java.util.Scanner;
4
5 /*
6 * 模拟登录,给三次机会,并提示还有几次。如果登录成功,就可以玩猜数字小游戏了。
7 *
8 * 分析:
9 * A:定义用户名和密码。已存在的。
10 * B:键盘录入用户名和密码。
11 * C:比较用户名和密码。
12 * 如果都相同,则登录成功
13 * 如果有一个不同,则登录失败
14 * D:给三次机会,用循环改进,最好用for循环。
15 */
16 public class StringTest2 {
17 public static void main(String[] args) {
18 // 定义用户名和密码。已存在的。
19 String username = "admin";
20 String password = "admin";
21
22 // 给三次机会,用循环改进,最好用for循环。
23 for (int x = 0; x < 3; x++) {
24 // x=0,1,2
25 // 键盘录入用户名和密码。
26 Scanner sc = new Scanner(System.in);
27 System.out.println("请输入用户名:");
28 String name = sc.nextLine();
29 System.out.println("请输入密码:");
30 String pwd = sc.nextLine();
31
32 // 比较用户名和密码。
33 if (name.equals(username) && pwd.equals(password)) {
34 // 如果都相同,则登录成功
35 System.out.println("登录成功,开始玩游戏");
36 //猜数字游戏
37 GuessNumberGame.start();
38 break;
39 } else {
40 // 如果有一个不同,则登录失败
41 // 2,1,0
42 // 如果是第0次,应该换一种提示
43 if ((2 - x) == 0) {
44 System.out.println("帐号被锁定,请与班长联系");
45 } else {
46 System.out.println("登录失败,你还有" + (2 - x) + "次机会");
47 }
48 }
49 }
50 }
51
52 }
B:字符串的遍历
1 package cn.itcast_04;
2
3 /*
4 * 需求:遍历获取字符串中的每一个字符
5 *
6 * 分析:
7 * A:如何能够拿到每一个字符呢?
8 * char charAt(int index)
9 * B:我怎么知道字符到底有多少个呢?
10 * int length()
11 */
12 public class StringTest {
13 public static void main(String[] args) {
14 // 定义字符串
15 String s = "helloworld";
16
17 // 原始版本
18 // System.out.println(s.charAt(0));
19 // System.out.println(s.charAt(1));
20 // System.out.println(s.charAt(2));
21 // System.out.println(s.charAt(3));
22 // System.out.println(s.charAt(4));
23 // System.out.println(s.charAt(5));
24 // System.out.println(s.charAt(6));
25 // System.out.println(s.charAt(7));
26 // System.out.println(s.charAt(8));
27 // System.out.println(s.charAt(9));
28
29 // 只需要我们从0取到9
30 // for (int x = 0; x < 10; x++) {
31 // System.out.println(s.charAt(x));
32 // }
33
34 // 如果长度特别长,我不可能去数,所以我们要用字符串的求长度功能。
35 for (int x = 0; x < s.length(); x++) {
36 // char ch = s.charAt(x);
37 // System.out.println(ch);
38 // 仅仅是输出,我就直接输出了。
39 System.out.println(s.charAt(x));
40 }
41 }
42 }
C:统计字符串中大写、小写及数字字符的个数
1 package cn.itcast_04;
2
3 /*
4 * 需求:统计一个字符串中大写字母字符,小写字母字符,数字字符出现的次数。(不考虑其他字符)
5 * 举例:
6 * "Hello123World"
7 * 结果:
8 * 大写字符:2个
9 * 小写字符:8个
10 * 数字字符:3个
11 *
12 * 分析:
13 * 前提:字符串要存在。
14 * A:定义三个统计变量
15 * bigCount = 0
16 * smallCount = 0
17 * numberCount = 0
18 * B:遍历字符串,得到每一个字符。
19 * length()和charAt()结合
20 * C:判断该字符到底是属于那种类型的?
21 * 大:bigCount++
22 * 小:smallCount++
23 * 数字:numberCount++
24 *
25 * 这道题目的难点就是如何判断某个字符是大的,还是小的,还是数字的?
26 * ASCII码表:
27 * 0 48
28 * A 65
29 * a 97
30 * 虽然,我们按照数字的这种比较是可以的,但是想多了,有比这还简单的
31 * char ch = s.charAt(x);
32 *
33 * if(ch>='0' && ch<='9') numberCount++
34 * if(ch>='a' && ch<='z') smallCount++
35 * if(ch>='A' && ch<='Z') bigCount++
36 * D:输出结果。
37 *
38 * 练习:把给定字符串的方式,改进为键盘录入字符串的方式。
39 */
40 public class StringTest2 {
41 public static void main(String[] args) {
42 // 定义一个字符串
43 String s = "Hello123World";
44
45 // 定义三个统计变量
46 int bigCount = 0;
47 int smallCount = 0;
48 int numberCount = 0;
49
50 // 遍历字符串,得到每一个字符。
51 for (int x = 0; x < s.length(); x++) {
52 char ch = s.charAt(x);
53
54 // 判断该字符到底是属于那种类型的
55 if (ch >= 'a' && ch <= 'z') {
56 smallCount++;
57 } else if (ch >= 'A' && ch <= 'Z') {
58 bigCount++;
59 } else if (ch >= '0' && ch <= '9') {
60 numberCount++;
61 }
62 }
63
64 // 输出结果。
65 System.out.println("大写字母" + bigCount + "个");
66 System.out.println("小写字母" + smallCount + "个");
67 System.out.println("数字" + numberCount + "个");
68 }
69 }
D:把字符串的首字母转成大写,其他转成小写
1 package cn.itcast_05;
2
3 /*
4 * 需求:把一个字符串的首字母转成大写,其余转为小写。(只考虑英文大小写字母字符)
5 * 举例:
6 * helloWORLD
7 * 结果:
8 * Helloworld
9 *
10 * 分析:
11 * A:先获取第一个字符
12 * B:获取除了第一个字符以外的字符
13 * C:把A转成大写
14 * D:把B转成小写
15 * E:C拼接D
16 */
17 public class StringTest {
18 public static void main(String[] args) {
19 // 定义一个字符串
20 String s = "helloWORLD";
21
22 // 先获取第一个字符
23 String s1 = s.substring(0, 1);
24 // 获取除了第一个字符以外的字符
25 String s2 = s.substring(1);
26 // 把A转成大写
27 String s3 = s1.toUpperCase();
28 // 把B转成小写
29 String s4 = s2.toLowerCase();
30 // C拼接D
31 String s5 = s3.concat(s4);
32 System.out.println(s5);
33
34 // 优化后的代码
35 // 链式编程
36 String result = s.substring(0, 1).toUpperCase().concat(s.substring(1).toLowerCase());
37 System.out.println(result);
38 }
39 }
E:把int数组拼接成一个指定格式的字符串输出
1 package cn.itcast_07;
2
3 /*
4 * 需求:把数组中的数据按照指定个格式拼接成一个字符串
5 * 举例:
6 * int[] arr = {1,2,3};
7 * 输出结果:
8 * "[1, 2, 3]"
9 * 分析:
10 * A:定义一个字符串对象,只不过内容为空
11 * B:先把字符串拼接一个"["
12 * C:遍历int数组,得到每一个元素
13 * D:先判断该元素是否为最后一个
14 * 是:就直接拼接元素和"]"
15 * 不是:就拼接元素和逗号以及空格
16 * E:输出拼接后的字符串
17 *
18 * 把代码用功能实现。
19 */
20 public class StringTest2 {
21 public static void main(String[] args) {
22 // 前提是数组已经存在
23 int[] arr = { 1, 2, 3 };
24
25 // 写一个功能,实现结果
26 String result = arrayToString(arr);
27 System.out.println("最终结果是:" + result);
28 }
29
30 /*
31 * 两个明确: 返回值类型:String
32 * 参数列表:int[] arr
33 */
34 public static String arrayToString(int[] arr) {
35 // 定义一个字符串
36 String s = "";
37
38 // 先把字符串拼接一个"["
39 s += "[";
40
41 // 遍历int数组,得到每一个元素
42 for (int x = 0; x < arr.length; x++) {
43 // 先判断该元素是否为最后一个
44 if (x == arr.length - 1) {
45 // 就直接拼接元素和"]"
46 s += arr[x];
47 s += "]";
48 } else {
49 // 就拼接元素和逗号以及空格
50 s += arr[x];
51 s += ", ";
52 }
53 }
54
55 return s;
56 }
57 }
F:字符串反转
1 package cn.itcast_07;
2
3 import java.util.Scanner;
4
5 /*
6 * 字符串反转
7 * 举例:键盘录入”abc”
8 * 输出结果:”cba”
9 *
10 * 分析:
11 * A:键盘录入一个字符串
12 * B:定义一个新字符串
13 * C:倒着遍历字符串,得到每一个字符
14 * a:length()和charAt()结合
15 * b:把字符串转成字符数组
16 * D:用新字符串把每一个字符拼接起来
17 * E:输出新串
18 */
19 public class StringTest3 {
20 public static void main(String[] args) {
21 // 键盘录入一个字符串
22 Scanner sc = new Scanner(System.in);
23 System.out.println("请输入一个字符串:");
24 String line = sc.nextLine();
25
26 /*
27 // 定义一个新字符串
28 String result = "";
29
30 // 把字符串转成字符数组
31 char[] chs = line.toCharArray();
32
33 // 倒着遍历字符串,得到每一个字符
34 for (int x = chs.length - 1; x >= 0; x--) {
35 // 用新字符串把每一个字符拼接起来
36 result += chs[x];
37 }
38
39 // 输出新串
40 System.out.println("反转后的结果是:" + result);
41 */
42
43 // 改进为功能实现
44 String s = myReverse(line);
45 System.out.println("实现功能后的结果是:" + s);
46 sc.close();
47 }
48
49 /*
50 * 两个明确: 返回值类型:String
51 * 参数列表:String
52 */
53 public static String myReverse(String s) {
54 // 定义一个新字符串,只不过内容为空
55 String result = "";
56
57 // 把字符串转成字符数组
58 char[] chs = s.toCharArray();
59
60 // 倒着遍历字符串,得到每一个字符
61 for (int x = chs.length - 1; x >= 0; x--) {
62 // 用新字符串把每一个字符拼接起来
63 result += chs[x];
64 }
65 return result;
66 }
67
68 }
G:统计大串中小串出现的次数
1 package cn.itcast_07;
2
3 /*
4 * 统计大串中小串出现的次数
5 * 举例:
6 * 在字符串"woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun"
7 * 结果:
8 * java出现了5次
9 *
10 * 分析:
11 * 前提:是已经知道了大串和小串。
12 *
13 * A:定义一个统计变量,初始化值是0。
14 * B:先在大串中查找一次小串第一次出现的位置索引。
15 * a:如果索引是-1,说明不存在了,就返回统计变量。
16 * b:如果托索引不是-1,说明存在,统计变量++。
17 * C:把刚才的索引+小串的长度作为开始位置截取上一次的大串,返回得到一个新的字符串,并把该字符串的值重新赋值给大串。
18 * D:回到B。
19 */
20 public class StringTest5 {
21 public static void main(String[] args) {
22 // 定义大串
23 String maxString = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";
24 // 定义小串
25 String minString = "java";
26
27 // 写功能实现
28 int count = getCount(maxString, minString);
29 System.out.println("java" + "在大串中出现了:" + count + "次");
30 }
31
32 /*
33 * 两个明确: 返回值类型:int 参数列表:两个字符串
34 */
35 public static int getCount(String maxString, String minString) {
36 // 定义一个统计变量,初始化值是0。
37 int count = 0;
38
39 /*
40 // 先在大串中查找一次小串第一次出现的索引位置。
41 int index = maxString.indexOf(minString);
42
43 // 先在大串中查找一次小串第一次出现的位置。
44 int index = maxString.indexOf(minString);
45 // 索引不是-1,说明存在,统计变量++。
46 while (index != -1) {
47 count++;
48 // 把刚才的索引+小串的长度作为开始位置截取上一次的大串,返回得到一个新的字符串,并把该字符串的值重新赋值给大串。
49 // int startIndex = index + minString.length();
50 // maxString = maxString.substring(startIndex);
51 maxString = maxString.substring(index + minString.length());
52 // 继续查
53 index = maxString.indexOf(minString);
54 }*/
55
56 int index;
57 // 先查,赋值,判断
58 while ((index = maxString.indexOf(minString)) != -1) {
59 count++;
60 maxString = maxString.substring(index + minString.length());
61 }
62
63 return count;
64 }
65
66 }