public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); StringBuilder sb = new StringBuilder(); String [] arry = str.split(" "); for (int i = 0; i < str.length(); i++) { if (Objects.equals(str.charAt(i), "[0-9]")){ sb.append(arry[i]+" "); } if (str.length()<2){ System.out.println(-1); }else if (Objects.equals(str.charAt(i), "C")){ sb.deleteCharAt(Integer.parseInt(arry[i-1])); } if (str.length()==0){ System.out.println(-1); }else if(Objects.equals(str.charAt(i), "D")){ sb.append(arry[i-1]+arry[i-1]+" "); } if (str.length()<2){ System.out.println(-1); }else if (Objects.equals(str.charAt(i), "+")){ sb.append(arry[i-2]+arry[i-1]+" "); } System.out.println(sb); } };检查上面代码指出问题,并优化输出
时间: 2024-02-14 12:10:01 浏览: 62
java输入语句scanner用法讲解.pdf
上面的代码存在以下几个问题:
1. 对输入的字符串进行 split() 操作时,应该将分割符设置为正则表达式 "[ ]+",以支持多个空格的分隔符;
2. 在判断字符是否为数字时,应该使用正则表达式 "[0-9]" 而不是字符串 "[0-9]";
3. 在删除字符串中的某个字符时,应该判断字符串的长度是否大于要删除的位置,否则会抛出 StringIndexOutOfBoundsException 异常;
4. 在添加字符串中的某个字符时,应该判断字符串的长度是否大于要添加的位置,否则会抛出 StringIndexOutOfBoundsException 异常;
5. 在每次操作结束后,应该将 StringBuilder 对象中的字符串输出,而不是在循环中输出。
以下是优化后的代码:
```
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
StringBuilder sb = new StringBuilder();
String[] arry = str.split("[ ]+");
for (int i = 0; i < arry.length; i++) {
if (arry[i].matches("[0-9]+")) {
sb.append(arry[i] + " ");
} else if (arry[i].equals("C")) {
int pos = Integer.parseInt(arry[i-1]) - 1;
if (pos >= 0 && pos < sb.length()) {
sb.deleteCharAt(pos);
}
} else if (arry[i].equals("D")) {
int pos = Integer.parseInt(arry[i-1]) - 1;
if (pos >= 0 && pos < sb.length()) {
sb.insert(pos, sb.charAt(pos));
}
} else if (arry[i].equals("+")) {
int pos1 = Integer.parseInt(arry[i-2]) - 1;
int pos2 = Integer.parseInt(arry[i-1]) - 1;
if (pos1 >= 0 && pos1 < sb.length() && pos2 >= 0 && pos2 < sb.length()) {
sb.insert(pos1, sb.charAt(pos2));
}
}
}
if (sb.length() == 0) {
System.out.println(-1);
} else {
System.out.println(sb.toString());
}
}
```
优化后的代码修复了上述问题,并在最后将 StringBuilder 对象中的字符串输出。
阅读全文