我有一个包含整数和非整数元素的String数组,我需要删除该数组的所有非整数元素。
现在我只能删除单个字符串中的非整数内容,但我需要删除数组中的整个非整数元素。
我的摘录如下
String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");
任何人都可以帮助我实现它吗?
答案 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));
}