字符串的案例
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 }