Java - substring issues

I'm going to show all of my code here so you guys get a gist of what I'm doing.

import java.io.*;

import java.util.*;

public class Plagiarism {

    public static void main(String[] args) {

        Plagiarism myPlag = new Plagiarism();

        if  (args.length == 0) {
            System.out.println("Error: No files input");
        }
        else if (args.length > 0) {
            try {
                List<String> foo = new ArrayList<String>();
                for (int i = 0; i < 2; i++) {
                    BufferedReader reader = new BufferedReader (new FileReader (args[i]));
                    foo = simplify(reader);
                        for (int j = 0; j < foo.size(); j++) {
                            System.out.print(foo.get(j));
                        }
                }

                int blockSize = Integer.valueOf(args[2]);
                System.out.println(args[2]);
                // String line = foo.toString();
                List<String> list = new ArrayList<String>();
                for (int k = 0; k < foo.size() - blockSize; k++) {
                    list.add(foo.toString().substring(k, k+blockSize));
                }
                System.out.println(list);
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static List<String> simplify(BufferedReader input) throws IOException {
        String line = null;
        List<String> myList = new ArrayList<String>();

        while ((line = input.readLine()) != null) {
            myList.add(line.replaceAll("[^a-zA-Z]","").toLowerCase());
        }
        return myList;  
    }

}

This is the code that is using substring.

int blockSize = Integer.valueOf(args[2]);

//"foo" is an ArrayList<String> which I have to convert toString() to use substring().
String line = foo.toString();
List<String> list = new ArrayList<String>();
for (int k = 0; k < line.length() - blockSize; k++) {
    list.add(line.substring(k, k+blockSize));
}

System.out.println(list);

When I specify blockSize as 4 in cmd this is the result:

[[, a, , ab, abc ]

the text file (standardised using my other code) is this:

abcdzaabcdd

so the result should be this:

[abcd, bcdz, cdza, ] etc.

Any help?

Thanks in advance.

Answers


Here is code showing how to improve a little your code. Main change is returning simplified string from simplify method instead of List<String> of simplified lines, which after converting it to string returned String in form

[value0, value1, value2, ...]

Now code returns String in form value0value1value2.

Another change is lowering indentation lever by removing unnecessary else if statement and braking control flow with System.exit(0); (you can also use return; here).

class Plagiarism {

    public static void main(String[] args) throws Exception {
        //you are not using 'myPlag' anywhere, you can safely remove it
//      Plagiarism myPlag = new Plagiarism();

        if (args.length == 0) {
            System.out.println("Error: No files input");
            System.exit(0);
        }

        String foo = null;
        for (int i = 0; i < 2; i++) {
            BufferedReader reader = new BufferedReader(new FileReader(args[i]));
            foo = simplify(reader);
            System.out.println(foo);
        }

        int blockSize = Integer.valueOf(args[2]);
        System.out.println(args[2]);

        List<String> list = new ArrayList<String>();
        for (int k = 0; k < foo.length() - blockSize; k++) {
            list.add(foo.toString().substring(k, k + blockSize));
        }
        System.out.println(list);

    }

    public static String simplify(BufferedReader input)
            throws IOException {

        StringBuilder sb = new StringBuilder();
        String line = null;
        while ((line = input.readLine()) != null) {
            sb.append(line.replaceAll("[^a-zA-Z]", "").toLowerCase());
        }
        return sb.toString();
    }
}

Need Your Help

Try to write a short version of this datetime comparison in Ruby and Rails

ruby

I have a time comparison method I would like to have in my class.

google-app-engine simple cron format of multiple task

google-app-engine

Lets say I want to schedule task a,b,c,d for cron to run a,b,c,d and wait one hour, before running again. Specific time doesn't matter and each task can vary in time, so what would be the format t...