user3364788
user3364788

Reputation: 99

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.

Upvotes: 1

Views: 309

Answers (1)

Pshemo
Pshemo

Reputation: 124215

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();
    }
}

Upvotes: 1

Related Questions