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编程技能很有帮助。