将一个行字符串转换为单个整数

时间:2013-07-15 15:22:57

标签: java

如果我在文件中有这一行:2 18 4 3 我想把它看作个别整数,我怎么可能?

我正在使用bufferreader:

BufferedReader(new FileReader("mp1.data.txt"));

我试图使用:

BufferedReader(new RandomAccessFile("mp1.data.txt"));

所以我可以使用方法

.readCahr();

但我收到了错误

如果我使用

int w = in.read();

它将读取ASCII,我想要它(在十进制中)

我想先将它作为字符串读取,但是我可以将每个数字分开吗?

我也想把每个数字放在一行,但我的文件很长,有数字

6 个答案:

答案 0 :(得分:5)

考虑使用Scanner

Scanner scan = new Scanner(new File("mp1.data.txt"));

您可以使用scan.nextInt()(只返回int,而不是String),只要scan.hasNextInt()

不需要那种丑陋的分裂和解析:)

然而,请注意这种方法将继续读取第一行之后的整数(如果这不是你想要的,你应该按照其他答案中列出的建议阅读和只处理一行)。

此外,只要文件中遇到非整数,hasNextInt()就会返回false。如果您需要一种方法来检测和处理无效数据,您应该再考虑其他答案。

答案 1 :(得分:1)

通过将软件工程分解为较小的问题来解决软件工程中的大问题非常重要。在这种情况下,您有三个任务:

  1. 从文件中读取一行
  2. 将其分解为单个部分(仍为字符串)
  3. 将每个部分转换为整数
  4. Java使每一个变得简单:

    1. 使用BufferedReader.readLine()首先将该行读作字符串
    2. 看起来分割就像用String.split()空格分割一样简单:

      String[] bits = line.split(" ");
      

      如果这还不够好,您可以在split电话中使用更复杂的正则表达式。

    3. 使用Integer.parseInt()解析每个部分。

    4. 拆分部分的另一个选项是使用Guava中的Splitter类。我个人更喜欢这个,但这是一个品味问题。

答案 2 :(得分:1)

您可以split()字符串,然后使用Integer.parseInt()方法将所有元素转换为Integer个对象。

try {
   BufferedReader br = new BufferedReader(new FileReader("mp1.data.txt"));
   String line = null;
   while ((line = br.readLine()) != null) {
     String[] split = line.split("\\s");
     for (String element : split) {
        Integer parsedInteger = Integer.parseInt(element);
        System.out.println(parsedInteger);
     }
   }
 }
 catch (IOException e) {
   System.err.println("Error: " + e);
 }

答案 3 :(得分:0)

使用BufferedReader阅读该行后,您可以使用String.split(regex)方法按空格("\\s")拆分字符串。

    for(String s : "2 18 4 3".split("\\s")) {
        int i = Integer.parseInt(s);
        System.out.println(i);
    }

答案 4 :(得分:0)

如果您使用Java 7+,则可以使用此实用程序方法:

List<String> lines = Files.readAllLines(file, Charset.forName("UTF-8"));
for (String line: lines) {
    String[] numbers = line.split("\\s+");
    int firstNumber = Integer.parseInt(numbers[0]);
    //etc
}

答案 5 :(得分:0)

试试这个;

try{
    // Open the file that is the first 
    FileInputStream fstream = new FileInputStream("textfile.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
    String strLine;
    //Read File Line By Line
    while ((strLine = br.readLine()) != null)   {
        //split line by whitespace 
        String[] ints = strLine.split(" ");

        int[] integers = new int[ints.length];

        // to convert from string to integers - Integer.parseInt ("123")
        for ( int i = 0; i < ints.length; i++) {
            integers[i] = Integer.parseInt(ints[i]);
        }
        // now do what you want with your integer
        // ...
    }
    in.close();
} catch (Exception e) {//Catch exception if any
    System.err.println("Error: " + e.getMessage());
}