如何从数组中删除所有非数字元素?

时间:2016-06-14 10:46:11

标签: java arrays string

我有一个包含整数和非整数元素的String数组,我需要删除该数组的所有非整数元素。

现在我只能删除单个字符串中的非整数内容,但我需要删除数组中的整个非整数元素。

我的摘录如下

String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");

任何人都可以帮助我实现它吗?

7 个答案:

答案 0 :(得分:1)

您的原始代码是:

String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");

首先,如果需要删除所有非整数字符,则需要将正则表达式从“[^ \ d。]”更改为“[^ \ d]”。 你的不会删除点字符。

然后,你说:

  

现在我只能删除单个非整数内容   字符串,但我需要删除一个中的整个非整数元素   阵列。

也许我没有做到这一点,但这不仅仅是在做同样的事情时循环的问题?你没有向我们展示任何带循环的代码,但也许你真正的问题是将修改后的值重新分配给数组?

试试这个:

for(int i=0;i<strArray.length;i++){
    strArray[i] = strArray[i].replaceAll("[^\\d]", "");
}
你可能会做这样的事吗? (这不起作用):

for(String str: strArray){
    str = str.replaceAll("[^\\d]", "");
}

这不起作用,因为修改后的字符串没有重新分配给数组,它被分配给新变量'str'。因此,此代码不会更新数组指向的值。

答案 1 :(得分:1)

您可以通过以下代码

来实现
 Pattern p = Pattern.compile("\\d*");
     String [] array=new String[]{"23","33.23","4d","ff"};
     List<String> lst=new ArrayList<String>();
            for (int i=0; i<array.length; i++) {
                if(p.matcher(array[i]).matches()){
                    lst.add(array[i]);
                }
            }
     System.out.println(""+lst);

答案 2 :(得分:0)

要从字符串中删除所有非整数值,您可以尝试以下操作:

public boolean isInt(String s)
{
    for(int i = 0; i < s.length(); i++)
    {
        try
        {
            Integer.parseInt(String.valueOf(s.charAt(i)));
        }catch(NumberFormatException e)
        {
            return false;
        }
    }
    return true;
}

然后你可以迭代你的数组并删除像这样的非整数元素

    for(int i = 0; i < arr.length; i++)
    {
        if(isInt(arr[i]))//remove the element
    }

答案 3 :(得分:0)

替换所有号码 - str = str.replaceAll("\\d", "");
替换所有非数字 - str = str.replaceAll("[^\\d]", "");

在数组中执行此操作,遍历数组并执行替换。

答案 4 :(得分:0)

如果你的正则表达式工作正常,你已经解决了大部分问题。您只需要在for循环中使用您的代码。您可以尝试以下代码:

public String[] removeNonIntegersFromArray(String[] array){

    ArrayList<String> temp = new ArrayList<String>();
    for (int i=0; i<array.length; i++) {
        String str = array[i];
        if(!str.matches(".*[^\\d]+.*")){
            temp.add(str);  
        }
    }

    String[] result = new String[temp.size()];
    result = (String[]) temp.toArray(new String[temp.size()]);

    return result;
}

编辑:我重构了代码,因为它将删除整数数组元素,该元素具有非整数。

答案 5 :(得分:0)

从列表中删除元素可能比从数组中删除元素更容易。但是,您可以流式传输数组元素,使用flatMap删除无效元素,然后转换回数组。

使用flatMap时,输入中的每个元素都可以在输出中生成零个,一个或多个元素,因此我们将有效元素映射到仅包含该元素的单个流,将无效元素映射到空流,从结果中删除它们。

String[] result = Arrays.stream(input)
    .flatMap(a -> Pattern.matches("\\d+", a)?
                Stream.of(a) : Stream.empty())
    .toArray(String[]::new);

答案 6 :(得分:0)

这是一个想法, 而不是替换所有非int数字,以查找所有整数并将它们添加到新字符串。

for(int i=0;i<str.length();i++)
{
   if(Character.isDigit(str.charAt(i)))
   new_str.append(str.charAt(i));
}
相关问题