MrD
MrD

Reputation: 5086

Splitting array on new line

I am submitting the following input through stdin:

4 2

30 one

30 two

15 three

25 four

My code is:

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

        BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
        String submittedString;
        System.out.flush();
        submittedString = stdin.readLine();

        zipfpuzzle mySolver = new zipfpuzzle();
        mySolver.getTopSongs(submittedString);

    }

Which calls:

//Bringing it all together
    public String getTopSongs(String myString) {

        setUp(myString);
        calculateQuality();
        qualitySort();
        return titleSort();

    }

Which calls

public void setUp(String myString) {

    String tempString = myString;

    //Creating array where each element is a line
    String[] lineExplode = tempString.split("\\n+");

    //Setting up numSongsAlbum and songsToSelect
    String[] firstLine = lineExplode[0].split(" ");
    numSongsAlbum = Integer.parseInt(firstLine[0]);
    songsToSelect = Integer.parseInt(firstLine[1]);

    System.out.println(lineExplode.length);
//etc
}

However, for some reason lineExplode.length returns value 1... Any suggestions?

Kind Regards, Dario

Upvotes: 1

Views: 441

Answers (5)

Reimeus
Reimeus

Reputation: 159784

Your String#split regex will work file on Strings with newline characters.

String[] lineExplode = tempString.split("\n");

The problem is that your tempString has none of these characters, hence the size of the array is 1.

Why not just put the readLine in a loop and add the Strings to an ArrayList

String submittedString;
while (!(submittedString= stdin.readLine()).equals("")) {
   myArrayList.add(submittedString);
}

Upvotes: 1

anubhava
anubhava

Reputation: 785246

Its better to use this split this way:

String[] lineExplode = 
       tempString.split(Pattern.quote(System.getProperty("line.separator")) + '+');

To keep this split on new line platform independent.

UPDATE: After looking at your posted code it is clear that OP is reading just one line (till \n) in this line:

 submittedString = stdin.readLine();

and there is no loop to read further lines from input.

Upvotes: 0

Dubas
Dubas

Reputation: 2876

You should use "\\n" character to separate by new line but check that not all OS use the same separators ( http://en.wikipedia.org/wiki/Newline )

To solve this is very useful the system property line.separator that contains the current separator charater(s) for the current OS that is running the application.

You should use:

String[] lineExplode = tempString.split("\\\\n");

using \n as separator

Or:

String lineSeparator = System.getProperty("line.separator");
String[] lineExplode = tempString.split(lineSeparator);

Using the current OS separator

Or:

String lineSeparator = System.getProperty("line.separator");
String[] lineExplode = tempString.split(lineSeparator + "+");

Using the current OS separator and requiring one item

Upvotes: 0

Adrian
Adrian

Reputation: 46452

Are you sure the file is using UNIX-style line endings (\n)? For a cross-platform split, use:

String[] lineExplode = tempString.split("[\\n\\r]+");

Upvotes: 0

Achintya Jha
Achintya Jha

Reputation: 12843

String[] lineExplode = tempString.split("\\n+");

The argument to String#split is a String that contains a regular expression

Upvotes: 2

Related Questions