Java笔试算法:逗号分隔值排序与字符串截取
需积分: 29 148 浏览量
更新于2024-10-09
1
收藏 165KB PDF 举报
"包含了一些Java笔试中的算法题目及对应解答,主要涉及字符串处理和数组操作。"
在给定的代码示例中,我们看到两道Java编程题目,它们都是关于字符串处理和数组操作的基础算法问题。
第一题:输入一组由逗号分隔的数字,并根据用户选择进行升序或降序排序。
这道题目的关键在于如何将输入的逗号分隔字符串转换为整数数组,然后进行排序。原代码中使用了`StringTokenizer`来分割字符串,但根据JDK1.6的API建议,更推荐使用`String`的`split`方法。以下是改进后的代码:
```java
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static int[] splitStringByComma(String source) {
if (source == null || source.trim().equals("")) {
return null;
}
String[] result = source.split(",");
int[] integers = new int[result.length];
for (int i = 0; i < result.length; i++) {
integers[i] = Integer.parseInt(result[i]);
}
return integers;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入数字序列(以逗号分隔):");
String input = scanner.nextLine();
int[] numbers = splitStringByComma(input);
Arrays.sort(numbers);
System.out.println("升序排序:");
for (int num : numbers) {
System.out.println(num);
}
System.out.println("降序排序:");
for (int i = numbers.length - 1; i >= 0; i--) {
System.out.println(numbers[i]);
}
}
}
```
第二题:编写一个函数,根据字节数截取字符串,确保不会截断汉字。
这个题目涉及到Unicode编码,因为汉字通常占用多个字节。为了确保不截断汉字,我们需要按照字符边界而不是字节边界来截取。这里可以使用`Character`类的`isHighSurrogate`和`isLowSurrogate`方法来判断是否在UTF-16编码的代理对中间。以下是解决方案:
```java
public class Main {
// ... 上面的代码保持不变 ...
public static String subStringByByte(String source, int byteCount) {
int charCount = 0;
int byteIndex = 0;
StringBuilder sb = new StringBuilder();
while (byteIndex < source.length() && charCount < byteCount) {
char c = source.charAt(byteIndex);
if (Character.isHighSurrogate(c)) {
// 如果是高位代理字符,跳过下一个低位代理字符
byteIndex++;
charCount++;
} else if (Character.isLowSurrogate(c)) {
// 如果是低位代理字符,忽略
byteIndex++;
charCount++;
} else {
// 普通字符
sb.append(c);
charCount++;
byteIndex++;
}
}
return sb.toString();
}
public static void main(String[] args) {
// ... 上面的代码保持不变 ...
// 添加截取字符串的代码
System.out.print("请输入要截取的字符串和字节数:");
String inputStr = scanner.next();
int byteNum = scanner.nextInt();
String subStr = subStringByByte(inputStr, byteNum);
System.out.println("截取后的字符串:");
System.out.println(subStr);
}
}
```
这两道题目覆盖了Java基础的字符串处理、数组操作以及Unicode编码理解,是常见的面试和笔试题目类型,对于提升Java编程技能很有帮助。
2021-06-03 上传
2023-09-12 上传
2023-05-13 上传
2024-06-08 上传
2023-06-01 上传
2023-08-05 上传
2023-06-28 上传
chfzju
- 粉丝: 2
- 资源: 1
最新资源
- WPF渲染层字符绘制原理探究及源代码解析
- 海康精简版监控软件:iVMS4200Lite版发布
- 自动化脚本在lspci-TV的应用介绍
- Chrome 81版本稳定版及匹配的chromedriver下载
- 深入解析Python推荐引擎与自然语言处理
- MATLAB数学建模算法程序包及案例数据
- Springboot人力资源管理系统:设计与功能
- STM32F4系列微控制器开发全面参考指南
- Python实现人脸识别的机器学习流程
- 基于STM32F103C8T6的HLW8032电量采集与解析方案
- Node.js高效MySQL驱动程序:mysqljs/mysql特性和配置
- 基于Python和大数据技术的电影推荐系统设计与实现
- 为ripro主题添加Live2D看板娘的后端资源教程
- 2022版PowerToys Everything插件升级,稳定运行无报错
- Map简易斗地主游戏实现方法介绍
- SJTU ICS Lab6 实验报告解析