我从文件中获取数字然后将其标记化。但是,在尝试转换数组时,我收到了NumberFormatException和很多错误。有什么想法吗?
以下是我的代码:
int[] intarray=new int[token.length];
int i=0;
for (String str : token){
intarray[i++] = Integer.parseInt(str);
}
非常感谢任何帮助。
[编辑] 当我在下面执行此代码时。没有错误,但它只在令牌中打印一些整数。
int[] ints = new int[arrays.length];
for(int i=0; i<array.length; i++){
try{
ints[i] = Integer.parseInt(array[i]);
}
catch(NumberFormatException nfe){
//Not an integer, do some
}
}
这是我得到数字的txt文件:
3 5
1 2 1
2 4 2
3 1 2
6 2 3
4 9 1
[解决] 我知道了。简单拆分(“\ W +”)。我认为分裂“”足以分裂换行符。 多谢你们。
答案 0 :(得分:2)
可能str
不代表int
。如果字符串不包含可解析的整数,请参阅docs - ... NumberFormatException
- 。
要了解您的问题,您可以执行以下操作:
int[] intarray=new int[token.length];
int i=0;
for(String str : token){
try {
intarray[i++] = Integer.parseInt(str);
} catch(NumberFormatException e) {
System.out.println(str + " is not a parsable int");
}
}
答案 1 :(得分:2)
最好的方法是通过删除所有非数字字符来确保您的str
仅代表ints
:
for (String str : token){
if(str.replaceAll("\\D","").length()>0)
intarray[i++] = Integer.parseInt(str.replaceAll("\\D",""));
}
顺便说一句,如果white-spaces
是您的数组中唯一可能存在的非数字字符,则只需使用str.trim()
答案 2 :(得分:0)
您好我完全同意@maroun,但如果您说您只在令牌数组中传递数值,那么请使用trim,因为有时我们不会在前后处理空间..
就像你试图转换
一样 " 123 " to int it will throw error because of extra space
因此我建议您在将字符串解析为int时使用 trim()
intarray[i++] = Integer.parseInt(str.trim());
答案 3 :(得分:0)
如果您正在读取输入中的空格,则可以获得NumberFormatException。在Integer.parseInt检查字符串是否表示整数
之前,请确保修剪字符串答案 4 :(得分:0)
我面临同样的问题,但在我的情况下,字符串仅包含数字。如果您的令牌仅包含数字值,那么您可以尝试使用
int [] intarray = new int [token.length];
int i = 0;
for(String str:token) {
intarray [i ++] = Integer.valueOf(str);
}
答案 5 :(得分:0)
问题在于你从文件中获取字符串的方式。尝试使用此函数来获取字符串数组:
String[] getTokens(String filename) {
try {
String line;
StringBuilder fileInAStringBuilder = new StringBuilder();
BufferedReader fileReader = new BufferedReader(new FileReader(filename));
while((line = fileReader.readLine()) != null) {
fileInAStringBuilder.append(line).append(' ');
}
String fileInAString = fileInAStringBuilder.toString();
fileInAString = fileInAString.replaceAll("\\D", " ");
fileReader.close();
return fileInAString.split(" +");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
您的代码将是这样的:
String[] token = getTokens("myFileName.txt");
int[] intarray=new int[token.length];
int i=0;
for (String str : token){
intarray[i++] = Integer.parseInt(str);
}
还要注意,如果任何数字太大而无法“适合”在int中,这可能会失败。