Java 将字符串数组转换为int数组时出错
帮个小忙。我很困惑,已经做了很多把字符串数组转换成int数组的变化 我从文件中获取数字,然后标记它。但是,我在尝试转换数组时遇到NumberFormatException和许多错误。有什么想法吗 下面是我的代码:Java 将字符串数组转换为int数组时出错,java,arrays,string,int,Java,Arrays,String,Int,帮个小忙。我很困惑,已经做了很多把字符串数组转换成int数组的变化 我从文件中获取数字,然后标记它。但是,我在尝试转换数组时遇到NumberFormatException和许多错误。有什么想法吗 下面是我的代码: int[] intarray=new int[token.length]; int i=0; for (String str : token){ intarray[i++] = Integer.parseInt(str); } 任何帮助都将不胜
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
}
}
[已解决]
我得到了它。简单拆分(“\W+”)。我认为拆分“”就足以拆分换行符。
谢谢各位 可能
str
不代表int
。见-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");
}
}
可能
str
不代表int
。见-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");
}
}
最好的方法是通过删除所有非数字字符,确保您的
str
仅表示int
:
for (String str : token){
if(str.replaceAll("\\D","").length()>0)
intarray[i++] = Integer.parseInt(str.replaceAll("\\D",""));
}
顺便说一下,如果数组中只有
空格
可能是非数字字符,您可以简单地使用str.trim()
最好的方法是通过删除所有非数字字符,确保str
仅代表整数
:
for (String str : token){
if(str.replaceAll("\\D","").length()>0)
intarray[i++] = Integer.parseInt(str.replaceAll("\\D",""));
}
顺便说一下,如果数组中只有
空格
可能是非数字字符,您可以简单地使用str.trim()
您好,我完全同意@maroun,但是如果您说您在令牌数组中只传递数值,那么请使用trim,因为有时我们不考虑前后的空格
就像你试图转换
将“123”改为int,由于额外的空间,它将抛出错误
因此,我建议您在将字符串解析为int时也使用trim()
intarray[i++] = Integer.parseInt(str.trim());
您好,我完全同意@maroun,但是如果您说您只传递令牌数组中的数值,那么请使用trim,因为有时我们不考虑前后的空间 就像你试图转换
将“123”改为int,由于额外的空间,它将抛出错误
因此,我建议您在将字符串解析为int时也使用trim()
intarray[i++] = Integer.parseInt(str.trim());
如果您正在读取输入中的空格,则可以获得NumberFormatException。请确保在整数之前修剪字符串。parseInt还检查字符串是否表示整数如果从输入中读取空格,则可能会出现NumberFormatException。请确保在整数之前修剪字符串。parseInt还检查字符串是否表示整数我面临同样的问题,但在我的情况下,字符串仅包含数字。如果您的令牌仅包含数字值,则可以尝试 int[]intarray=新的int[token.length] int i=0 for(字符串str:token) { intarray[i++]=Integer.valueOf(str)
}我面临同样的问题,但在我的例子中,字符串只包含数字。如果您的令牌只包含数字值,则可以尝试使用 int[]intarray=新的int[token.length] int i=0 for(字符串str:token) { intarray[i++]=Integer.valueOf(str)
}问题在于从文件中获取字符串的方式。尝试使用此函数获取字符串数组:
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);
}
请注意,如果任何数字太大,无法“容纳”整数,则此操作可能会失败。问题在于从文件中获取字符串的方式。尝试使用此函数获取字符串数组:
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太大,这仍然会导致NumberFormatException。我假设没有大的数字,参考上面的示例,如果值对于int太大,这仍然会导致NumberFormatException。我假设没有大的数字,参考上面的示例,我认为用valueOf替换parseInt不会解决问题。。再看一遍Integer.valueOf(str)在内部调用Integer.parseInt(str)我认为用valueOf替换parseInt不会解决这个问题。。再次阅读它。valueOf(str)在内部调用Integer.parseInt(str)`不可分整数不可分整数不可分整数不可分整数不可分整数不可分整数不可分整数不可分整数不可分整数不可分整数不可分整数不可分整数不可分整数不可分整数不可分整数不可分整数不可分整数不是可解析的int不是可解析的int不是可解析的int不是可解析的int `那么你有这个数量的不可解析的
int
s。它们可能是一些空字符串。`不可分int不可分int不可分int不可分int不可分int不可分int不可分int不可分int不可分int不可分int不可分int不可分int不可分int不可分int不可分int不可分int不可分int不可分int不可解析的int不可解析的int不可解析的int不可解析的int不可解析的int不可解析的int `那么你就有了这个数量的不可解析的int
s。它们可能是一些空字符串。