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编程技能很有帮助。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2023-05-19 上传
2010-06-19 上传
2022-01-25 上传
2023-09-12 上传
2018-01-17 上传
2021-03-12 上传