[Java] 纯文本查看 复制代码
public class Test01 {
/**
* * 从控制台接收一串字符串,完成以下要求 (共10分)
a,求出该字符串的长度并输出到控制台,如字符串长度为:X
b,将该字符串转为数组,判断该数组第一个字符和最后一个字符是否相同,不相同则交换
c,统计出数组中的每个字符出现的次数,然后自然排序后按指定格式输出到控制台,如 a=3,b=4,c=4,d=3,e=2,f=1
d,将第二步互换后的数组角标为奇数的字符用”*”号替换,然后遍历输出
e,将数组中元素重新拼接成字符串,最后截取第一个'*'到第三个'*'之间的数据输出
*/
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
//提示用户输入
System.out.println("请输入一段字符串:");
//将键盘录入的字符串存储到line中
String line = sc.nextLine();
//a,求出该字符串的长度并输出到控制台,如字符串长度为:X
System.out.println(line + "字符串的长度为:" + line.length());
//将字符串转为字符数组
char[] arr = line.toCharArray();
//b,将该字符串转为数组,判断该数组第一个字符和最后一个字符是否相同,不相同则交换
if (arr[0] != arr[arr.length - 1]) {
char temp = arr[0]; //定义第三方变量,交换两个数组元素的位置
arr[0] = arr[arr.length - 1];
arr[arr.length - 1] = temp;
}
//创建一个字符数组的备份,用于排序
char[] copy = arr.clone();
Arrays.sort(copy);
//c,统计出数组中的每个字符出现的次数,然后自然排序后按指定格式输出到控制台,如 a=3,b=4,c=4,d=3,e=2,f=1
int count = 0; //计数器,用于统计字符出现的次数
StringBuffer sb = new StringBuffer(); //StringBuffer对象用于拼接输出结果
for (int i = 0; i < copy.length;) {
for (int j = i + 1; j < copy.length; j++) {
if (copy[i] == copy[j]) {
count ++ ;
}else {
sb.append(copy[i]).append("=").append(count+1).append(",");
break;
}
}
i += count + 1; //跳过相同的字符序列
count = 0; //count清零,用于统计下一个字符出现的次数
}
System.out.println(sb.substring(0, sb.length()-1));
//d,将第二步互换后的数组角标为奇数的字符用”*”号替换,然后遍历输出
for (int i = 0; i < arr.length; i++) {
if (i % 2 != 0) {
arr[i] = '*';
}
}
//增强for循环,遍历字符数组中的每一个元素
for (char c : arr) {
System.out.print(c);
}
System.out.println();
//e,将数组中元素重新拼接成字符串,最后截取第一个'*'到第三个'*'之间的数据输出
sb.delete(0, sb.length());
String str = new String(arr);
for (int index = 0; index < arr.length;) {
index = str.indexOf("*", index);
if (index == -1) {
break;
}
sb.append(index);
index += "*".length();
}
int start = Integer.parseInt(sb.substring(0, 1));
int end = Integer.parseInt(sb.substring(2, 3));
String newStr = str.substring(start + 1, end);
System.out.println(newStr);
}
}