Java 如何打印出正确的输出
简单地说,这就是我需要的代码,用于在第四个和最后一个输入上强制转换IllegalArgumentException,并打印出错误的输入[] 我最成功的尝试是让代码在[2]输出和[1,2]输出之后打印出错误的输入[] 电流输出为Java 如何打印出正确的输出,java,Java,简单地说,这就是我需要的代码,用于在第四个和最后一个输入上强制转换IllegalArgumentException,并打印出错误的输入[] 我最成功的尝试是让代码在[2]输出和[1,2]输出之后打印出错误的输入[] 电流输出为 [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[
[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;
}
}
只需将
.useDelimiter(“*,*”)
更改为.useDelimiter(“,”)代码>它需要一点正则表达式,而不是您使用的正则表达式
这是我的方法
1) 我将使用模式编译正则表达式(Scanner.useDelimiter在内部使用已编译的模式)
^\\s*(\\d+(\\s*,\\s*\\d+)?\\s*$
2) 我将检查字符串上是否与正则表达式匹配
3) 如果匹配检查空字符串,则返回空数组
4) 如果不使用逗号分隔法拆分字符串并将元素放置在int数组中(不要忘记修剪拆分的字符串)
公共静态模式数组\u Pattern=Pattern
.编译(“^\\s*(\\d+(\\s*,\\s*\\d+)?\\s*$”;
公共静态int[]getArray(字符串str){
int[]emptyArray={};
Matcher match=ARRAY_pattern.Matcher(str);
if(match.matches()){
如果(str.length()>0){
字符串[]arr=str.split(“,”);
int[]intarray=新int[arr.length];
对于(int i=0;i
我个人会这样做:
// 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;
步骤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;
}
// Is the input not valid? Return a bad result
if(!s.matches("(\\d+,)*\\d+")){
System.out.print("Bad input ");
int[] emptyArray = {};
return emptyArray;
}
第3步:验证输入是单个数字,还是多个由逗号分隔的数字。如果不是,请打印并返回
// Is the input empty? Return an empty array
if(s.isEmpty()){
System.out.print("empty array ");
int[] emptyArray = {};
return emptyArray;
}
// Is the input not valid? Return a bad result
if(!s.matches("(\\d+,)*\\d+")){
System.out.print("Bad input ");
int[] emptyArray = {};
return emptyArray;
}
步骤4:现在我们可以确定输入是有效的。因此,我们可以用逗号(,
)拆分输入并创建整数数组。这可以通过您已有的扫描仪来完成,尽管我个人会使用字符串[]strArray=s.split(“,”)
然后将此字符串
-数组转换为int
-数组
使用扫描仪
时,它将如下所示:
// 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;
作为参考,这里是一个不带扫描仪的可能实现:
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;
String[]strArray=s.split(“,”);
int arrayLength=strArray.length;
int[]intArray=新的int[arrayLength];
对于(int index=0;index
我会首先在“str2ia”方法的开头删除字符串中的空白,然后在while循环中使用一个变量来跟踪前一个字符-如果它是非整数且当前字符是非整数,则抛出异常。-这是解决问题的一种方法。scan.nextInt()代码>这将仅返回int
s<代码>“1,2”
将跳转到2
,它将忽略无法转换为int
的内容。就我个人而言,我会首先验证整个输入,然后将其转换为整数数组。例如:步骤1:删除输入中的所有空白。步骤2:输入字符串是否为空?打印空数组
并返回空数组。步骤3:输入字符串是否无效(例如,如果(!s.matches(“(\\d+,)*\\d+”)
)?打印错误输入
并返回空数组。步骤4:将现在已验证的字符串转换为整数数组(我个人会使用逗号上的str.split,但如果需要,您仍然可以使用扫描仪)。这是家庭作业吗,或者你想将这些字符串转换成整数数组,用于你正在进行的与学校无关的项目?@KevinCruijssen这或多或少是一个有趣的暑期项目,只是一个更大项目的一部分。如果我正确地理解了你说的话,我不确定你的意思是什么,但我不确定这是否与代码的其余部分兼容。这将导致6,8,9,10
也输出错误的输入[]
。试过了,就像凯文说的那样。啊,是的,当然了,很明显,我总是这样做,并且使它变得更复杂。我真的不知道为什么我浪费了这么多时间,而我可以用Delimeter作为逗号。但是一个小问题是,有没有一种简单的方法可以让它打印出“错误输入”?