Java - 子串问题

时间:2014-03-13 22:14:57

标签: java string arraylist substring

我将在这里展示我的所有代码,以便你们了解我正在做的事情。

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

}

这是使用子字符串的代码。

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

当我在cmd中将blockSize指定为4时,结果为:

[[, a, , ab, abc ]

文本文件(使用我的其他代码标准化)是这样的:

abcdzaabcdd

所以结果应该是这样的:

[abcd, bcdz, cdza, ] etc.

任何帮助?

提前致谢。

1 个答案:

答案 0 :(得分:1)

以下代码显示了如何改进您的代码。主要更改是从simplify方法而不是简化行的List<String>返回简化字符串,将其转换为字符串后返回String格式

[value0, value1, value2, ...]

现在代码以value0value1value2形式返回String。

另一个变化是通过使用else if删除不必要的System.exit(0);语句和制动控制流来降低缩进杠杆(您也可以在此使用return;)。

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