是
否
是
否
是
否
是
否
获取字符串
字符数组
大写?
小写?
数字?
非字母与数字
大写字母
小写字母
数字
i
结束
i=i+1
第一步 拆分字符串为字符数组:
static void count(String str) {
// 将字符串拆分为字符数组
char[] charArray = str.toCharArray();
}
第二步 定义相关变量记录结果:
// 记录数字字符串
String digit = "";
// 记录统计数字出现的次数
int digitCount = 0;
// 记录大写字母字符串
String upper = "";
// 记录大写字母出现的次数
int upperCount = 0;
// 记录小写字母字符串
String lower = "";
// 记录小写字母出现的次数
int lowerCount = 0;
// 记录非字母与数字的字符串
String other = "";
// 记录非字母与数字出现的次数
int otherCount = 0;
第三步 遍历字符数组,依次判断:
// 遍历字符数组依次判断字符类型
for (char ch : charArray) {
// 统计大写字母
if (Character.isUpperCase(ch)) {
upperCount++;
// 字符转字符串
upper += Character.toString(ch);
}
// 统计小写字母
if (Character.isLowerCase(ch)) {
lowerCount++;
lower += Character.toString(ch);
}
// 统计数字
if (Character.isDigit(ch)) {
digitCount++;
digit += Character.toString(ch);
}
// 统计非字母或数字
if (!Character.isLetterOrDigit(ch)) {
otherCount++;
other += Character.toString(ch);
}
}
完整代码:
package task03.code0301;
public class CountChar {
public static void main(String[] args) {
String str = "ABCD123!@#$%ab";
count(str);
}
static void count(String str) {
char[] charArray = str.toCharArray();
String digit = "";
int digitCount = 0;
String upper = "";
int upperCount = 0;
String lower = "";
int lowerCount = 0;
String other = "";
int otherCount = 0;
for (char ch : charArray) {
if (Character.isUpperCase(ch)) {
upperCount++;
upper += Character.toString(ch);
}
if (Character.isLowerCase(ch)) {
lowerCount++;
lower += Character.toString(ch);
}
if (Character.isDigit(ch)) {
digitCount++;
digit += Character.toString(ch);
}
if (!Character.isLetterOrDigit(ch)) {
otherCount++;
other += Character.toString(ch);
}
}
System.out.printf("大写字母%d个:\"%s\";\n小写字母%d个:\"%s\";\n数字%d个:\"%s\";\n其他字符%d个:\"%s\"。\n", upperCount, upper,
lowerCount, lower, digitCount, digit, otherCount, other);
}
}
// 大写字母4个:"ABCD";
// 小写字母2个:"ab";
// 数字3个:"123";
// 其他字符5个:"!@#$%"。
第二题
如: s1=“asdafghjka”, s2=“aaasdfg” 他们的最大子串为"asd"
提示: 将短的那个串进行长度依次递减的子串与较长的串比较。
思路:
1、判断两个字符串的长度大小;
2、若长的字符串包含短的字符串,则短字符串为两者最大子串;
3、短的字符串长度依次递减,观察长的字符串是否包含,若包含,则此时为两者的最大子串,以"aaasdfg"为例:
当长度=7时,有1子串——(0,7)“aaasdfg”;因前面做了先行判断,可跳过;
当长度=6时,有2子串——(0,6)“aaasdf”;(1,7)“aasdfg”;
当长度=5时,有3子串——(0,5)“aaasd”;(1,6)“aasdf”;(2,7)“asdfg”;
当长度=4时,有4子串——(0,4)“aaas”;(1,5)“aasd”;(2,6)“asdf”;(3,7)“sdfg”;
…
3、规律总结:
第一次:i=0,j=0–>(0,7)=(?,?);不确定;
第二次:i=1,j=0–>(0,6)=(j,7-i); i=1,j=1–>(0,6)=(j,7-i+j);确定下标起点为j,猜想终点位置为7-i+j,继续验证;
第三次:i=2,j=0–>(0,5)=(j,7-i+j); i=2,j=1–>(1,6)=(j,7-i+j); i=2,j=2–>(2,7)=(j,7-i+j);确定终点位置为7-i+j。
第一步 判断两个字符串长度大小:
static String getMaxSonStr(String s1, String s2) {
String maxStr = s1.length() > s2.length() ? s1 : s2;
St