java read only integers from file

If I have a file that contains for example:

results1: 2, 4, 5, 6, 7, 8, 9
results2: 5, 3, 7, 2, 8, 5, 2

I want to add the integers from each line to a array. One array for each line. How can I do this with code that does only read the integers?

Here's what I got this far

 String data = null;
    try {


        Scanner in = new Scanner(new File(myFile));

        while (in.hasNextLine()) {


                data = in.nextLine();

                numbers.add(data);


        }
        in.close();

    } catch (Exception e) {

    }

Upvotes: 0

Views: 1373

Answers (4)

duffymo
duffymo

Reputation: 308753

Easy.

One line per array, not two as you have it. New line after each one.

Read each line as a String, discard the leading "resultsX:", and split what remains at a delimiter of your choosing (e.g. comma). Parse each into an integer and add it to a List.

I don't think that leading "results1: " is adding any value. Why do you have that?

Upvotes: 3

vefthym
vefthym

Reputation: 7462

Open the file with a BufferedReader br and then read it line by line. Store each line in an int array and add all those int arrays to a list. At the end, this list will contain all the int arrays that we wanted, so iterate this list to do whatever you want to do next.

String filePath = "/path/to/file";
BufferedReader br = null;
List<Integer[]> arrays = new ArrayList<>(); //this contains all the arrays that you want

try {
  br = new BufferedReader(new FileReader(filePath));

  String line = null;
  while ((line = br.readLine()) != null) {
      line = line.substring(line.indexOf(":")+2); //this starts the line from the first number
      String[] stringArray = line.split(", ");
      Integer[] array = new Integer[stringArray.length];
      for (int i = 0; i < stringArray.length; ++i) {
        array[i] = Integer.parseInt(stringArray[i]);
      }
      arrays.add(array);
  }      
} catch (FileNotFoundException ex) {
   System.err.println(ex);
} catch (IOException ex) {
   System.err.println(ex);
} finally {
   try {
     br.close();
   } catch (Exception ex) {
     System.err.println(ex);
   }      
}

Since ArrayLists keep insertion order, then, e.g., arrays.get(3) will give you the array of the fourth line (if there is such a line) and arrays.size() will give you the number of lines (i.e., int arrays) that are stored.

Upvotes: 0

Viorel Florian
Viorel Florian

Reputation: 581

Assuming you have an input file, like this:

2,4,5,6,7,8,9
5,3,7,2,8,5,2

here is a code snippet to load it:

    String firstLine = "";
    String secondLine = "";
    File file = new File("path/to/file");
    try {
        BufferedReader br = new BufferedReader(new FileReader(file)); 
        firstLine = br.readLine();
        secondLine = br.readLine();
    } catch(Exception e){
        e.printStackTrace();
    }

    String[] firstResult = firstLine.split(",");
    String[] secondResult = secondLine.split(",");

    int[] firstIntegers = new int[firstResult.length];
    for(int i = 0; i <= firstResult.length ; i++){
        firstIntegers[i] = Integer.parseInt(firstResult[i]);

    }

    int[] secondIntegers = new int[secondResult.length];
    for(int i = 0; i <= secondResult.length ; i++){
        firstIntegers[i] = Integer.parseInt(secondResult[i]);
    }

Upvotes: 0

Andr&#233; R.
Andr&#233; R.

Reputation: 1647

public static void main(String[] args) throws IOException {
    BufferedReader reader=null;
    try {
        reader = new BufferedReader(new FileReader(new File("PATH TO FILE")));

        // Only works if File allways contains at least two lines ... all lines after the second
        // will be ignored
        System.out.println(String.format("Array 1 : %s", Arrays.toString(stringArray2IntArray(readNextLine(reader)))));
        System.out.println(String.format("Array 2 : %s", Arrays.toString(stringArray2IntArray(readNextLine(reader)))));
    } finally {
        if (reader!=null) {
            reader.close();
        }
    }
}

private static Integer[] stringArray2IntArray(String[] numStrings) {
    List<Integer> result = new ArrayList<Integer>();
    for (int i = 0; i < numStrings.length; i++) {
        result.add(Integer.parseInt(numStrings[i].trim()));
    }
    return result.toArray(new Integer[numStrings.length]);
}

private static String[] readNextLine(BufferedReader reader) throws IOException {
    return reader.readLine().split(":")[1].split(",");    
} 

Upvotes: 0

Related Questions