gpt4 book ai didi

java - 从大文件中选择随机元素时出现 NumberFormatException

转载 作者:行者123 更新时间:2023-12-01 14:25:13 24 4
gpt4 key购买 nike

我有一个非常大的文件,其中包含这样的用户 ID。这个大文件中的每一行都是一个用户 ID。

149905320
1165665384
66969324
886633368
1145241312
286585320
1008665352

所以在那个大文件中,我将拥有大约 3000 万个用户 ID。现在我试图从那个大文件中选择随机用户 ID。下面是我的程序,但在某些时候它总是给我这样的异常 - 我不确定为什么会发生这个异常。

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:59)
at java.lang.Integer.parseInt(Integer.java:481)
at java.lang.Integer.parseInt(Integer.java:510)
at com.host.bulls.service.lnp.RandomReadFromFile.main(RandomReadFromFile.java:65)

下面是我的程序-

public static void main(String[] args) throws Exception {

File f = new File("D:/abc.txt");
RandomAccessFile file;

try {

file = new RandomAccessFile(f, "r");
long file_size = file.length();

// Let's start
long chosen_byte = (long)(Math.random() * (file_size - 1));
long cur_byte = chosen_byte;

// Goto starting position
file.seek(cur_byte);

String s_LR = "";
char a_char;

// Get left hand chars
for (;;)
{
a_char = (char)file.readByte();
if (cur_byte < 0 || a_char == '\n' || a_char == '\r' || a_char == -1) break;
else
{
s_LR = a_char + s_LR;
--cur_byte;
if (cur_byte >= 0) file.seek(cur_byte);
else break;
}
}

// Get right hand chars
cur_byte = chosen_byte + 1;
file.seek(cur_byte);
for (;;)
{
a_char = (char)file.readByte();
if (cur_byte >= file_size || a_char == '\n' || a_char == '\r' || a_char == -1) break;
else
{
s_LR += a_char;
++cur_byte;
}
}

// Parse ID
if (cur_byte < file_size)
{
int chosen_id = Integer.parseInt(s_LR);
System.out.println("Chosen id : " + chosen_id);
}
else
{
throw new Exception("Ran out of bounds..");
}

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

我上面的代码有问题吗?

最佳答案

我尝试运行您的代码,发现了一个额外的错误 - 您必须在阅读之前检查 cur_byte,如下所示:

if (cur_byte < file_size) {
a_char = (char) file.readByte();
}

否则你会得到EOFException

使用您的示例 abc.txt,我没有得到 java.lang.NumberFormatException: For input string: "" 异常。

但是,如果我在 abc.txt 中添加空行,我迟早会遇到此异常。因此,问题出在 abc.txt 中某处的空行。

关于java - 从大文件中选择随机元素时出现 NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17206864/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com