【发布时间】:2014-04-01 23:50:46
【问题描述】:
我有一个包含 {127,a,0,10} 的字符串数组。我想获取该数组中的数字并将它们放入一个 int 数组中,该数组现在将包含 {127,0,10}。
我尝试对字符串数组中的每个单独的值使用 parseInt,但它不适用于字符串中的字符。
谢谢!
【问题讨论】:
标签: java arrays string int parseint
我有一个包含 {127,a,0,10} 的字符串数组。我想获取该数组中的数字并将它们放入一个 int 数组中,该数组现在将包含 {127,0,10}。
我尝试对字符串数组中的每个单独的值使用 parseInt,但它不适用于字符串中的字符。
谢谢!
【问题讨论】:
标签: java arrays string int parseint
Java 8 答案:
int[] results = Arrays.stream(arr)
.filter(s -> s.matches("-?[0-9]+"))
.mapToInt(s -> Integer.parseInt(s))
.toArray();
编辑:更好:
int[] results = Arrays.stream(arr)
.filter(s -> s.matches("-?[0-9]+"))
.mapToInt(Integer::parseInt)
.toArray();
展示又一个新的酷语言功能。我应该第一次看到这个。遗憾的是,尽管 Java 8 已经正式发布了整整两周,但我还没有掌握 Java 8。
【讨论】:
OptionalInteger 的parseInt 版本,以及像mapToInt 这样的流映射方法,它适用于返回OptionalInt 并丢弃isPresent 为假的结果?然后我可以从管道中删除整个项目。
您可以创建一个函数来告诉您字符串是否代表有效的 int 值:
public static boolean isInteger(String s) {
try {
Integer.parseInt(s);
} catch(NumberFormatException e) {
return false;
}
// only got here if we didn't return false
return true;
}
来源:Determine if a String is an Integer in Java
您现在可以轻松地循环数组并删除不需要的元素:
for(int i=0; i< myStringArray.length(); i++){
if(!isInteger(myStringArray[i])){
myStringArray[i]=null;
}
}
【讨论】:
我尝试对字符串数组中的每个单独值使用 parseInt 但它不适用于字符串中的字符。
parseInt 不适用于字符,这是该 API 的设计。如果数值无效,它将抛出异常。所以你要做的就是将你的代码封装在 try/catch 中。并且在 NumberFormatException 的情况下不要将项目放在第二个数组中,否则添加。希望您能够编写此代码。
【讨论】:
试试这样的
Integer[] numberArray = new Integer[stringArray.length];
int index = 0;
for(String s : stringArray) {
try {
Integer stringAsNumber = Interger.valueOf(s);
numberArray[index] = stringAsNumber;
index++;
} catch(NumberFormatException nfe) {
//String is not a valid number
}
}
return numberArray;
【讨论】:
您可以使用正则表达式来确定字符串是否可以解析为整数。
String [] arr = {"1233", "45", "a34", "/", "0", "19"};
for(int i = 0; i < arr.length; i++)
if(arr[i].matches("-?[0-9]+"))
System.out.println(arr[i]);
其余的很容易做到。
编辑:这会检测正数和负数。
【讨论】:
matches 始终要求匹配整个字符串。
试试这个..
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.ArrayList;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
String[] var = new String[]{"127","a","0","10"};
List<Integer> var2 = new ArrayList<Integer>();
//Integer extraction
for (String s : var)
{
try{
var2.add(Integer.parseInt(s));
System.out.println(Integer.parseInt(s));
}catch(NumberFormatException e){}
}
//int array if you want array only or you just use List<Integer>
int[] array = new int[var2.size()];
for(int i = 0; i < var2.size(); i++) array[i] = var2.get(i);
}
}
【讨论】: