java - 如何打印出正确的输出
问题描述
简而言之,这几乎就是我需要代码在第四个和最后一个输入上强制转换 IllegalArgumentException 并打印出 Bad input[]
我最成功的尝试是在 [2] 输出和 [1, 2] 输出之后打印出 Bad input[] 代码。
电流输出为
[6, 8, 9, 10]
[1002]
empty array []
[2]
Bad input[]
Bad input[]
[1, 2]
但我需要它
[6, 8, 9, 10]
[1002]
empty array []
Bad input[]
Bad input[]
Bad input[]
Bad input[]
完整代码如下。
import java.util.Arrays;
import java.util.Scanner;
public class String2intArray {
public static void main(String[] args) {
System.out.println(Arrays.toString(str2ia("6,8 ,9 , 10")));
System.out.println(Arrays.toString(str2ia("1002")));
System.out.println(Arrays.toString(str2ia("")));
System.out.println(Arrays.toString(str2ia(", 2")));
System.out.println(Arrays.toString(str2ia("one,two")));
System.out.println(Arrays.toString((str2ia("1,,2"))));
System.out.println(Arrays.toString(str2ia("1 , 2 ,")));
}
public static int[] str2ia(String s) {
int arraylengt = 0;
int arrayindex = 0;
Scanner scan = new Scanner(s).useDelimiter(" *, *");
if(s.length() == 0) {
int[] emptyArray = {};
System.out.print("empty array ");
return emptyArray;
}
while (scan.hasNext()) {
if (scan.hasNextInt()) {
int nextInt = scan.nextInt();
arraylengt ++;
} else {
// discard next token
scan.next();
}
}
int[] intArray = new int[arraylengt];
Scanner scan2 = new Scanner(s).useDelimiter(" *, *");
try {
while (scan2.hasNext()) {
if (scan2.hasNextInt()) {
intArray[arrayindex] = scan2.nextInt();
arrayindex++;
} else {
// discard next token
throw new IllegalArgumentException("Bad input");
}
}
} catch (IllegalArgumentException e) {
System.out.print("Bad input");
int[] emptyArray = {};
return emptyArray;
}
return intArray;
}
}
解决方案
我个人会做这样的事情:
第 1 步:删除所有空格:
// Remove all spaces from the input:
s = s.replaceAll("\\s", "");
第 2 步:验证输入是否为空。如果是,请打印并返回。
// Is the input empty? Return an empty array
if(s.isEmpty()){
System.out.print("empty array ");
int[] emptyArray = {};
return emptyArray;
}
第 3 步:验证输入是单个数字,还是用逗号分隔的多个数字。如果不是,请打印并返回。
// Is the input not valid? Return a bad result
if(!s.matches("(\\d+,)*\\d+")){
System.out.print("Bad input ");
int[] emptyArray = {};
return emptyArray;
}
第 4 步:现在我们确定输入是有效的。所以我们可以用逗号 ( ) 分割输入,
并创建整数数组。这可以用Scanner
你已经拥有的来完成,尽管我个人会使用 aString[] strArray = s.split(",");
然后将此String
-array 转换为int
-array。
有了你Scanner
,它看起来像这样:
// Determine the length of the array:
int arraylength = 0;
Scanner scan = new Scanner(s).useDelimiter(",");
while(scan.hasNextInt()){
scan.nextInt(); // Discard the integer
arraylength++;
}
// Fill the result-array:
int[] intArray = new int[arraylength];
int index = 0;
Scanner scan2 = new Scanner(s).useDelimiter(",");
while(scan2.hasNextInt()){
intArray[index] = scan2.nextInt();
index++;
}
return intArray;
作为参考,这将是一个可能的实现,没有Scanner
:
String[] strArray = s.split(",");
int arrayLength = strArray.length;
int[] intArray = new int[arrayLength];
for(int index = 0; index < arrayLength; index++){
// No need to try-catch the ParseException, since we already validated the String above
intArray[index] = Integer.parseInt(strArray[index]);
}
return intArray;
推荐阅读
- javascript - 输入输出不会立即更新它会延迟
- c - 在c中的静态const结构中强制成员初始化
- azure - 将无服务器用于大规模云数据库
- javascript - 尽可能简单地更新数量而不创建带有角度的新行
- javascript - 有没有办法使用 Javascript 判断 Cystoscape 节点是否位于某个坐标?
- mysql - 将数据转换并导入 MySQL 数据库
- c++ - 标准字符串短字符串优化有没有办法找出最大短尺寸?
- python - 计算熊猫系列字典中的值
- azure-active-directory - 无法使用扩展数据创建事件
- c# - ComboBox 数据源:显示完整的项目