【问题标题】:Printing the error message without the [ ]打印不带 [ ] 的错误消息
【发布时间】: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


【解决方案1】:

这是一种通过对现有代码进行2 处更改 来实现所需输出的方法:

首先:替换以下代码:

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 ,")));

-与-

// Define the input as an array of input strings and print result
// by iterating the input array elements
String [] inputStrings = {"6,8 ,9 , 10", "1002", "", ", 2", "Ett,Två", "1,,2", "1 , 2 ,"};
for (String input : inputStrings) {
    int [] result = str2ia(input);
    if (result == null) {
        System.out.println("");
    }
    else {
        System.out.println(Arrays.toString(result));
    }
}

-AND-

第二次:替换以下代码:

...
} catch (IllegalArgumentException e) {
    System.out.print("Bad input");
    int[] emptyArray = {};
    return emptyArray;
}

-与-

...
} catch (IllegalArgumentException e) {
    System.out.print("Bad input");
    // Return null instead of an empty array, in case of bad input.
    return null;
}

【讨论】:

    【解决方案2】:

    创建您自己的代码来迭代数组:

    int[] aArray = str2ia("6,8 ,9 , 10");
    for (int number : aArray) {
      System.out.print(number);
    }
    System.out.println();
    

    【讨论】:

    • 该代码会将所有值混合在一起。例如,如果数组包含 10、2、35 和 617,它将写入“10235617”。可能不是 OP 想要的。
    • @FredK 好吧,我只是想知道是否有一种简单的方法可以做到这一点,并且从我收到的 cmets 中,我决定花费可能几个小时(是的,我就是这么糟糕在编程时),这样我就可以改变输出的一件事。这只不过是一条错误消息,以防输入出现问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 2011-05-05
    相关资源
    最近更新 更多