0

我需要使用 BufferedReader 读取文件,在第二行我知道总会有 2 个整数:例如 456 666;但我不知道他们会有多少位数,所以在使用 BufferedReader 提取行(字符串类型)后,我逐个字符地读取该字符串的字符以获取数字并将它们添加到 char 数组中。当我拥有所有数字时,我用 '\0' 填充数组示例:

array[0] = '4'
array[1] = '5'
array[2] = '6'
array[3] = '\0'
array[4] = '\0'
and so on

现在我想把这个数组变成一个整数。我尝试首先将此数组转换为字符串,然后应用 Integer.parseInt 但我不起作用。我不知道如何解决这个问题。有什么帮助吗?

4

8 回答 8

2

如果您只阅读该行并尝试将其解析为 int 会怎样。由于您不知道它是否是整数,因此请使用异常来处理它:

String[] nextLine = reader.nextLine().split("\\s+") ;
Integer[] integer = new Integer[nextLine.length()] ;
try
{
  for(int i=0; i < nextLine.length();i++)  
   integer[i] = Integer.parseInt(nextLine[i]) ;
}
catch(NumberFormatException exception)
{
  exception.printStackTrace();
}  
于 2012-10-18T19:50:24.810 回答
2

我强烈建议Scanner改用。从文档中:

一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。Scanner 使用分隔符模式将其输入分解为标记,默认情况下匹配空格。然后可以使用各种 next 方法将生成的标记转换为不同类型的值。

AScanner将使用空格作为其默认分隔符,因此您应该能够简单地调用sc.nextInt()每个预期的整数标记。有关使用示例,请参见链接页面。

于 2012-10-18T19:51:41.110 回答
2

您不能将数组强制转换为字符串...但是如果您使用空格而不是\0, 那么您可以这样做:

int i = Integer.parseInt(String.valueOf(array).trim());

关于评论 - 很酷,也trim()消除了尾随0x0

public static void main(final String[] args) {
    char[] chars = new char[5];
    chars[2] = '9';
    System.out.printf("Original length: %d%n",String.valueOf(chars).length());
    System.out.printf("Trimmed length:  %d%n",String.valueOf(chars).trim().length());
    System.out.printf("Parsed:          %d%n",Integer.parseInt(String.valueOf(chars).trim()));
}
于 2012-10-18T19:54:16.150 回答
1

假设array是您的 char 数组,这应该可以完成您的工作:

String str = "";
for (char c : array)
    str += c;

int result = Integer.parseInt(str);
于 2012-10-18T19:52:28.677 回答
1

你最好使用Scanner.

Scanner input = new Scanner(new File("myfile.txt"));
int first  = input.nextInt();
int second = input.nextInt();
于 2012-10-18T19:53:21.487 回答
0
    // Assume an initial size of the array
    char array[] = new char[5];
    array[0] = '4';
    array[1] = '5';
    array[2] = '6';
    array[3] = '\0';
    array[4] = '\0';


    StringBuffer buffer = new StringBuffer();

    for (int i = 0; i < array.length && array[i] != '\0'; i++){
        buffer.append(array[i]);
    }

    int myInteger = Integer.parseInt(buffer.toString());

如果你想先创建一个字符串,然后将其解析为一个整数,我建议你使用 StringBuffer 主要是因为 Java 中的字符串是不可变的(你不能更改其中的特定字符)。如果您使用 StringBuffer,您可以通过将 toString 方法应用于新创建的对象然后使用 Integer.parseInt 来解决此问题。

于 2012-10-18T20:03:30.250 回答
0

好的,如果您只是想将该数组转换为字符为整数,那么您可以这样做。

字符数组[] = 新字符[5];

    array[0] = '4';
    array[1] = '5';
    array[2] = '6';
    array[3] = '\0';
    array[4] = '\0';

    String newString = String.copyValueOf(array);
    newString = newString.replace("\0", "");

    int newInt = Integer.parseInt(newString);

    System.out.println(array);
    System.out.println(newInt);

上面的代码已经过测试和验证。

于 2012-10-18T20:12:04.430 回答
0

public String(char[] letters)然后使用 String 构造函数Integer.parseInt(...)

于 2012-10-19T06:09:13.490 回答