【发布时间】:2018-07-19 19:18:49
【问题描述】:
好吧,这更像是如果有一种简单的方法可以输出到
[6, 8, 9, 10]
[1002]
empty array []
Bad input
Bad input
Bad input
Bad input
如果是这样怎么办?
这更像是在我开始做一些需要花费大量时间才能让输出“更好”的事情之前吹毛求疵
所以我只是想知道它是否可以通过简单的方式完成,如果是这样的话,该怎么做。
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("Ett,Två")));
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;
s = s.replaceAll("\\s", "");
Scanner scan = new Scanner(s).useDelimiter(",");
if(s.length() == 0) {
int[] emptyArray = {};
System.out.print("empty array ");
return emptyArray;
}
try {
if(!s.matches("(\\d+,)*\\d+")){
throw new IllegalArgumentException("Bad input");
}
} catch (IllegalArgumentException e) {
System.out.print("Bad input");
int[] emptyArray = {};
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;
}
}
【问题讨论】:
-
如果你想控制输出,那么你不会使用
Arrays.toString。自己写。 -
您可以通过多种方式做到这一点:例如,您可以创建一个根据需要清除数组的打印方法,或者您可以创建一个扩展数组并覆盖 toString() 的类
-
定义你自己的格式化程序。
-
最简单的方法是
IntStream.of(array).mapToObj(Integer::toString).collect(Collectors.joining(", "))。
标签: java arrays string java.util.scanner