练习:
1、输入一个字符串和一个数字,数字表示字节个数,然后按照指定的字节个数来截取这个字符串,要求不准出现半个字符的现象
2、输入一个字符串,提取这个字符串中的数字并求和 -> sdf85dfghd72s6 -> 8 5 7 2 6 -> 28
3、输入一个字符串,提取这个字符串中的数字并排序->sdf85dfghd72s6 -> 8 5 7 2 6 -> 2 5 6 7 8
4、输入一个字符串,利用charAt方法判断这个字符串是否是一个回文字符串
5、输入一个字符串,统计每个字符出现的个数---hsoafngifaoa -> h:1 s:1 o:2 a:3 f:2 n:1 g:2 i:1
package day1031;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num;
do {
System.out.println("请输入要执行的序号:" + "\n" + "\t" + "1:截取字符串" + "\n" + "\t" + "2:提取数字并求和" + "\n" + "\t" + "3:提取数字并排序 " + "\n" + "\t" + "4:回文字符串 " + "\n" + "\t" + "5:统计出现次数 " + "\n" + "\t" + "6:退出 ");
num = sc.nextInt();
switch (num) {
case 6:
System.out.println("已退出!");
break;
case 1:
/**
* 截取字符串
*/
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个字符串:");
String inputString = scanner.nextLine();
System.out.println("请输入字节数(整数):");
int byteCount = scanner.nextInt();
// 确保字节数不超过字符串长度,并转换为字符数,因为一个UTF-8字符通常占用1到4个字节
double charCount = Math.min(byteCount * 1.25, inputString.length());
// 如果字节数不足以构成一个完整字符,那么返回字符串而不是截断结果
if (charCount == 0 || charCount % 1 != 0) {
System.out.println("由于字节限制,可能现已出现半个字符的情况。请重新输入一个完整的字符数。");
return;
}
// 截取字符串
String cutstring = inputString.substring(0, (int) charCount);
// 打印输出按要求截取的字符串
System.out.println("按照指定字节数截取的字符串是: " + cutstring);
break;
case 2:
/**
* 提取数字并求和
*/
Scanner s = new Scanner(System.in);
System.out.println("请输入一个包含数字的字符串:");
String input = s.nextLine();
// 正则表达式匹配所有的数字
Pattern pattern = Pattern.compile("\\d()+");
Matcher matcher = pattern.matcher(input);
// 定义一个sum来存储符合条件的数字
int sum = 0;
while (matcher.find()) {
// 将找到的数字添加到总和中
sum += Integer.parseInt(matcher.group());
}
// 打印输出满足条件的数字之和
System.out.println("字符串中的数字之和是: " + sum);
break;
case 3:
/**
*提取数字并排序
*/
Scanner scan = new Scanner(System.in);
System.out.println("请输入一个包含数字的字符串:");
String input1 = scan.nextLine();
// extractAndSortNumbers:提取和排序数字
// 将键盘录入的信息传进下面定义的extractAndSortNumbers方法进行判断,并存入名为numbers的int数组中
int[] numbers = extractAndSortNumbers(input1);
// 打印输出名为numbers的这个数组
System.out.println(Arrays.toString(numbers));
break;
case 4:
/**
* 回文字符串
*/
Scanner scann = new Scanner(System.in);
System.out.println("请输入一个回文的字符串进行测试:");
String input2 = scann.nextLine();
// isPalindrome表示:判断一个字符串是否为回文字符串
// 将键盘录入的信息传进下面定义isPalindrome的方法进行判断,并用名为isPalindrome的布尔类型返回值
boolean isPalindrome = isPalindrome(input2);
// 打印输出名
System.out.println(isPalindrome);
break;
case 5:
/**
* 统计出现次数
*/
Scanner scanne = new Scanner(System.in);
System.out.println("请输入一个字符串进行测试:");
String input3 = scanne.nextLine();
// countCharFrequency表示:计算字符频率
// HashMap<Character, Integer>方法表示:可以用于存储字符到其他类型值的映射,例如统计字符出现的频率、构建字符到其对应信息的映射等
// 这里可以用来表示统计字符串中每个字符出现的次数
HashMap<Character, Integer> charFrequency = countCharFrequency(input3);
System.out.println("每个字符出现的次数如下:");
// 使用foreach语句遍历并打印
for (Character ch : charFrequency.keySet()) {
System.out.println(ch + ": " + charFrequency.get(ch));
}
break;
default:
System.out.println("输入无效,请重新输入一个正确的序号!");
break;
}
} while (num != 6);
}
/**
* 提取数字并排序
* @param input
* @return
*/
public static int[] extractAndSortNumbers(String input) {
// 用正则表达式提取出数字
Pattern pattern = Pattern.compile("\\d()+");
Matcher matcher = pattern.matcher(input);
// 创建一个以numberList为名的ArrayList对象,用来存储Integer类型的元素
ArrayList<Integer> numbersList = new ArrayList<>();
// 调用Java中的Matcher类下面的matcher.find查找匹配子序列并返回布尔值方法进行循环查找
while (matcher.find()) {
// matcher.group()方法表示:在Java正则表达式中用于获取与正则表达式匹配的文本。
// Integer.parseInt()方法表示:将字符串转换为整数
// numbersList.add()方法表示:添加元素
numbersList.add(Integer.parseInt(matcher.group()));
}
// 创建一个名为numbers的int数组用来存储获取的元素数量
// numbersList.size()方法表示:获取List中当前存在的元素数量。它始终返回当前存在的元素数量,无论列表中是否包含重复元素或空值。
int[] numbers = new int[numbersList.size()];
for (int i = 0; i < numbersList.size(); i++) {
// numbersList.get()方法表示:是Java中List接口的一个方法,用于获取列表中指定索引位置的元素。
numbers[i] = numbersList.get(i);
}
// Arrays.sort方法表示:对数组进行排序,它可以对数组中的元素进行排序,默认情况下是按照从小到大的顺序进行排序。
Arrays.sort(numbers);
return numbers;
}
/**
* 回文字符串
* @param s
* @return
*/
public static boolean isPalindrome(String s) {
// 定义开始和结束
int start = 0;
int end = s.length() - 1;
// 用while循环判断
while (start < end) {
// 开头和结尾不相同则不是回文字符串
if (s.charAt(start) != s.charAt(end)) {
return false;
}
start++;
end--;
}
return true;
}
/**
* 统计出现次数
* @param input
* @return
*/
public static HashMap<Character, Integer> countCharFrequency(String input) {
// 定义一个名为frequencyMap的空的哈希映射(HashMap),键是字符型Character,值是整数类型Integer,
// 用来存放字符及其对应的出现次数
HashMap<Character, Integer> frequencyMap = new HashMap<>();
// 使用for-each循环遍历输入字符串的所有字符,将其转换成字符数组
for (char ch : input.toCharArray()) {
// 对于数组中的每一个字符(ch),从frequencyMap方法中获取该字符当前的计数值(默认为0,如果该字符未存在于映射中)则当前计数值+1
frequencyMap.put(ch, frequencyMap.getOrDefault(ch, 0) + 1);
}
// 遍历结束后返回包含所有字符频率信息的frequencyMap
return frequencyMap;
}
}
标签:练习题,字符,Java,Scanner,System,println,实训,字符串,out
From: https://blog.csdn.net/Li_030406/article/details/143475659