模块三作业
第一题
编程统计字符串"ABCD123!@#$%ab"中大写字母、小写字母、数字、其它字符的个数并打 印出来
代码
/*
* 编程统计字符串"ABCD123!@#$%ab"中大写字母、小写字母、数字、其它字符的个数并打印出来。
*/
public class CountCharTest {
public static void main(String[] args){
// 声明一个变量,并赋值"ABCD123!@#$%ab"
String str = "ABCD123!@#$%ab";
// 声明变量来统计个数
int upperCount = 0; // 统计大写字母个数
int intCount = 0; // 统计数字个数
int lowerCount = 0; // 统计小写字母个数
int otherCount = 0; // 统计其他字符个数
// 遍历字符串,取得每个字符,通过ASCII码对应的数值来判断属于哪种类型
for(int i = 0; i<str.length(); i++){
// 获取字符串str索引为i的字符
char c = str.charAt(i);
// 将字符转为ASCII码对应数值
int num = (int) c;
// 判断属于哪种类型
if (65 <= num && num <= 90){
// 大写字母A-Z 65-90
upperCount += 1;
}else if(48 <=num && num <=57){
// 数字 0-9 48-57
intCount += 1;
}else if(97 <= num && num<=122){
// 小写字母 a-z 97-122
lowerCount += 1;
}else{
// 其他字母
otherCount += 1;
}
}
// 打印个数统计结果
System.out.println("大写字母个数为:" + upperCount + ",小写字母个数为:"
+ lowerCount +",数字个数为:" + intCount
+ ",其他字符的个数为:" + otherCount);
}
}
解题思路
第一步:
- 声明字符串变量,赋值要被统计的字符串
- 声明一些变量,来记录各个类型的数量
// 声明一个变量,并赋值"ABCD123!@#$%ab"
String str = "ABCD123!@#$%ab";
// 声明变量来统计个数
int upperCount = 0; // 统计大写字母个数
int intCount = 0; // 统计数字个数
int lowerCount = 0; // 统计小写字母个数
int otherCount = 0; // 统计其他字符个数
第二步:
-
遍历字符串,取得每个字符,通过ASCII码对应的数值来判断属于哪种类型
-
将字符转为ASCII码对应数值,和ASCII码对比,得到结果
// 遍历字符串,取得每个字符,通过ASCII码对应的数值来判断属于哪种类型
for(int i = 0; i<str.length(); i++){
// 获取字符串str索引为i的字符
char c = str.charAt(i);
// 将字符转为ASCII码对应数值
int num = (int) c;
// 判断属于哪种类型
if (65 <= num && num <= 90){
// 大写字母A-Z 65-90
upperCount += 1;
}else if(48 <=num && num <=57){
// 数字 0-9 48-57
intCount += 1;
}else if(97 <= num && num<=122){
// 小写字母 a-z 97-122
lowerCount += 1;
}else{
// 其他字母
otherCount += 1;
}
}
第三步:
- 打印最终结果
// 打印个数统计结果
System.out.println("大写字母个数为:" + upperCount + ",小写字母个数为:"
+ lowerCount +",数字个数为:" + intCount
+ ",其他字符的个数为:" + otherCount);
第二题
-
编程获取两个指定字符串中的最大相同子串。
-
如: s1=“asdafghjka”, s2=“aaasdfg” 他们的最大子串为"asd"
-
提示: 将短的那个串进行长度依次递减的子串与较长的串比较
代码
/*
* 编程获取两个指定字符串中的最大相同子串。
* 如: s1="asdafghjka", s2="aaasdfg" 他们的最大子串为"asd"
* 提示: 将短的那个串进行长度依次递减的子串与较长的串比较
*/
public class GetLagerAlikeChar {
public static void main(String[] args){
// 声明两个变量,指定字符串
String str1 = "asdafghjka";
String str2 = "aaasdfg";
// 声明两变量用于记录数据
int largeCount = 0; // 记录最大子串的长度
String largeChar = ""; // 记录最大子串
// 将字符串str2转为字符数组
char[] c1 = str2.toCharArray();
// 循环控制字符串的起始位置和字符串长度
for(int i = 0; i < str2.length(); i++){
// 字符数组变字符串的起始位置
for(int j = i+1; j < str2.length(); j++){
// 逐步增加字符串长度
// 形成新的字符串
String str3 = new String(c1, i, j-i);
// 判断str1是否包含str3
boolean result = str1.contains(str3);
if(result){
// str1包含str3内容
// 获取新字符串的长度
int temp = str3.length();
if(temp > largeCount){
// 判断是否比之前的最大还大
// 将新字符串赋值给largeChar
largeChar = str3;
// 将新最大字符串长度赋值给largeCount
largeCount = temp;
}
}
}
}
// 打印最大子串
System.out.println("最大子串为:" + largeChar);
}
}
解题思路
第一步:
-
声明变量,指定两个字符串
-
声明两变量,分别用来记录当前最大子串和最大子串的长度
// 声明两个变量,指定字符串
String str1 = "asdafghjka";
String str2 = "aaasdfg";
// 声明两变量用于记录数据
int largeCount = 0; // 记录最大子串的长度
String largeChar = ""; // 记录最大子串
第二步:
- 将较短字符串转为字符数组,便于重新组合新的字符串
- 通过循环来控制从字符数组中获取字符串的起始位置和字符串长度
- 判断新形成的字符串是否被较长的字符串所包含
- 包含则将新形成字符串赋值给最大子串这个变量,将其长度赋值给最大子串长度这个变量
- 不包含则继续形成下一个新字符串
- 两层循环结束,则获得最大子串
// 将字符串str2转为字符数组
char[] c1 = str2.toCharArray();
// 循环控制字符串的起始位置和字符串长度
for(int i = 0; i < str2.length(); i++){
// 字符数组变字符串的起始位置
for(int j = i+1; j < str2.length(); j++){
// 逐步增加字符串长度
// 形成新的字符串
String str3 = new String(c1, i, j-i);
// 判断str1是否包含str3
boolean result = str1.contains(str3);
if(result){
// str1包含str3内容
// 获取新字符串的长度
int temp = str3.length();
if(temp > largeCount){
// 判断是否比之前的最大还大
// 将新字符串赋值给largeChar
largeChar = str3;
// 将新最大字符串长度赋值给largeCount
largeCount = temp;
}
}
}
第三步:
- 打印最大子串结果
// 打印最大子串
System.out.println("最大子串为:" + largeChar);
第三题
-
准备一个 HashMap 集合,统计字符串"123,456,789,123,456"中每个数字字符串出现的次数并打印出来。
-
如:
-
123 出现了 2 次
-
456 出现了 2 次
-
789 出现了 1 次
代码
import java.util.HashMap;
import java.util.Map;
/**
* 准备一个 HashMap 集合,统计字符串"123,456,789,123,456"中每个数字字符串出现的次数并打印出来。
* 如:
* 123 出现了 2 次
* 456 出现了 2 次
* 789 出现了 1 次
*/
public class HashMapTest {
public static void main(String[] args){
// 声明字符串变量
String str = "123,456,789,123,456";
// 声明Map集合
Map<String, Integer> map = new HashMap<>();
// 按,分割字符串
String[] strs = str.split(",");
// 遍历字符串数组,统计每个字符串出现的次数
for(String str1 : strs){
// 判断以字符串作为key是否已存在集合map中
if(!map.containsKey(str1)){
// 不存在则以字符串为key存入集合中
map.put(str1, 1);
}else{
// 存在则将value值+1
map.put(str1, map.get(str1) + 1);
}
}
// 按要求打印
for(String key : map.keySet()){
System