如何过滤整数并将它们从String复制到新数组

时间:2018-02-27 15:09:34

标签: java arraylist casting integer chars

有一个字符串(任何字符串)。它可能不包含数字;

如何将该数组中包含的整数存储到ArrayList中。

试图

public ArrayList<Integer> toList() {
    String stringToList;
    ArrayList<Integer> l = new ArrayList<>();
    stringToList = this.toString(); // I am just copying the string from the object
    for (int i = 0; i < stringToList.length(); i++) {
        if(((Integer) stringToList.charAt(i)) instanceof Integer){
                 //Here store it into the arrayList
                }             
    }
    return l;
}

但显然它不起作用,因为演员不是解决方案。有任何想法吗?感谢。

6 个答案:

答案 0 :(得分:2)

由于字符串中可能存在12,因此您无法直接使用charAt()。您可以将stringToList,分开,然后使用Integer.parseInt()

public ArrayList<Integer> toList() {
    String stringToList;
    ArrayList<Integer> l = new ArrayList<>();
    stringToList = this.toString(); // I am just copying the string from the object
    String[] strings = stringToList.split(",\\s+");
    for (int i = 0; i < strings.length; i++) {
        try {
            l.add(Integer.parseInt(strings[i]));
        } catch (NumberFormatException e) {
            e.printStackTrace();
        }
    }
    return l;
}

答案 1 :(得分:1)

您可以拆分字符串,例如

String[] splits = stringToList.split(",");

使用Integer.parseInt(splits[0]);之类的东西将它们转换为整数,并将它们存储在ArrayList

答案 2 :(得分:1)

代码示例: (Execution)

enter image description here

^(?=(?:[^-]*-){4}[^-]*$)(?=(?:\D*\d){13}\D*$).*$

描述:[^ - ?0-9] +

+在一次和无限次之间,尽可能多次,根据需要回馈

- ?其中一个字符是“ - ?”

0-9“0”和“9”之间范围内的字符

答案 3 :(得分:0)

您可以使用Character.isDigit方法检查字符是否为数字。

if (Character.isDigit(stringToList.charAt(0))){
    l.add((int)stringToList.charAt(0));
}

在添加到整数的arraylist之前,将char转换为int。

答案 4 :(得分:0)

解析,检查,转换,以一行方式收集:

此解决方案可以解析任何String,因为它会在转换为Integer之前检查从拆分中获取的每个部分仅由数字组成(或者之前是减号)

String str = "1 , 2, 2a, 3,    -14, b55";
List<Integer> list =  Arrays.stream(str.split(","))
                            .map(String::trim)
                            .filter(s -> s.matches(""-?\\d+""))
                            .map(Integer::valueOf)
                            .collect(Collectors.toList());
System.out.println(list);     // list : [1, 2, 3, -14]
  • 在逗号
  • 上拆分String
  • 制作一个Stream
  • 删除spaces周围的<{li}
  • 检查只有数字
  • 将每个元素转换为Integer
  • 将它们收集到List

答案 5 :(得分:0)

如果您使用的是Java 8,则可以尝试以下操作:

public ArrayList<Integer> toList(String input) {
    return Arrays.stream(input.split(","))
                 .map(String::trim)
                 .filter(s -> s.matches("\\b\\d+\\b"))
                 .map(Integer::valueOf)
                 .collect(Collectors.toCollection(ArrayList::new));

}