Java笔试算法:逗号分隔值排序与字符串截取

需积分: 29 4 下载量 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 上传
java笔试题算法 目录 :envelope: 说明 项目介绍 该文档主要是笔主在学习 Java 的过程中的一些学习笔记,但是为了能够涉及到大部分后端学习所需的技术知识点我也会偶尔引用一些别人的优秀文章的链接。文档大部分内容都是笔者参考书籍以及自己的原创。少部分面试题回答参考了其他人已有答案,上面都已注明。 该文档涉及的主要内容包括: Java、 数据结构与算法、计算机网络与数据通信、 操作系统、主流框架、数据存储、架构、面试必备知识点等等。相信不论你是前端还是后端都能在这份文档中收获到东西。 关于转载 如果需要引用到本仓库的一些东西,必须注明转载地址!!!毕竟大多都是手敲的,或者引用的是我的原创文章,希望大家尊重一下作者的劳动:grinning_face_with_big_eyes::grinning_face_with_big_eyes::grinning_face_with_big_eyes:! 如何对该开源文档进行贡献 笔记内容大多是手敲,所以难免会有笔误,你可以帮我找错别字。 很多知识点我可能没有涉及到,所以你可以对其他知识点进行补充。 现有的知识点难免存在不完善或者错误,所以你可以对已有知识点的修改/补充。 为什么要做这个开源文档? 在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫:grinning_face_with_smiling_eyes:)。所以,我决定通