Is there any faster way of doing this in Java?
Yes. Scanner is fairly slow (at least according to my experience).
If you don’t need to validate the input, I suggest you just wrap the stream in a BufferedInputStream and use something like
A small comparison:
Reading 17 megabytes (4233600 numbers) using this code
Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) sum += scanner.nextInt();
took on my machine 3.3 seconds. while this snippet
BufferedReader bi = new BufferedReader(new InputStreamReader(System.in)); String line; while ((line = bi.readLine()) != null) for (String numStr: line.split("\\s")) sum += Integer.parseInt(numStr);
took 0.7 seconds.
By messing up the code further (iterating over
String.substring) you can get it down to about 0.1 seconds quite easily, but I think I’ve answered your question and I don’t want to turn this into some code golf.