1

假设我的代码有效。但是,这个小代码片段:

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

给我这个输出:

a b c d
123
abcdz
456
aa
b
c
dd

期望的输出:

abcd123abcdz456aabcdd

输出此结果的代码位于 main 方法中,并且是:

for (int i = 0; i < args.length; i++) {
                    BufferedReader reader = new BufferedReader (new FileReader (args[i]));
                    List<String> foo = simplify(reader);
                        for (int j = 0; j < foo.size(); j++) {
                            System.out.println(foo.get(j));
                        }
                }

有任何想法吗?

提前谢谢大家。

4

4 回答 4

1
StringBuilder sb = new StringBuilder();
while ((line = input.readLine()) != null) {
    String s = line.replaceAll("[^a-zA-Z0-9 ]", "").toLowerCase();
    myList.add(s);
    sb.append(s.trim());
}

然后打印出来sb.toString()

System.out.println(sb.toString());

于 2014-03-13T16:06:17.937 回答
0

readLine应该忽略换行符。你能显示你用于输出的代码吗?

于 2014-03-13T16:06:22.543 回答
0

有几种选择,

// Add a trim call
myList.add(line.replaceAll ("[^a-zA-Z0-9 ]", "").toLowerCase().trim());

或者,调用chain来替换

myList.add(line.replaceAll ("[^a-zA-Z0-9 ]", "").
    replace("\r", "").replace("\n","").toLowerCase());

或者也许您应该将该逻辑完全提取到自定义方法中。

编辑 添加这个,

if (foo.get(j) != null && foo.get(j).trim().length() > 0) {
  System.out.println(foo.get(j).trim());
}
于 2014-03-13T16:08:29.617 回答
0

为了删除所有空白并String从多个输入中生成一个Strings

// initializing StringBuilder
StringBuilder sb = new StringBuilder();
// iterating over lines read by Reader
while ((line = input.readLine()) != null) {
    // appending line to StringBuilder
    sb.append(line);
}

// printing StringBuilder toString lowercased with replaced white space
String result = sb.toString().toLowerCase().replaceAll("\\s", "");
System.out.println(result);
于 2014-03-13T16:09:36.750 回答