【问题标题】:Java standardising ListJava标准化列表
【发布时间】:2014-03-13 15:59:56
【问题描述】:

假设我的代码有效。但是,这个小sn-p代码:

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

有什么想法吗?

提前谢谢大家。

【问题讨论】:

  • 你应该修剪空格和换行符,仅此而已。
  • 我明白 - 但是很少/不知道如何将其编码到我的代码中
  • 字符串 s = ""; s.replace(" ", "")s.trim()
  • 删除正则表达式中的那个空间,然后输出列表而不在元素之间放置换行符...?
  • @KlemensMorbe 有 Java 答案。谢尔特姆是对的。你已经有了一个正则表达式。只需将 \n 和 \r 替换为 ""。

标签: java arrays list standardized


【解决方案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());

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我不想使用 StringBuilder。输出结果的代码是 for (int i = 0; i foo = 简化(读者); for (int j = 0; j
    • 啊,那是你的问题。使用 System.out.println 意味着您在生成输出时在每个元素后添加一个换行符。请改用 System.out.print()。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      有几种选择,

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

      或者,调用链替换

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

      【讨论】:

      • 我已经尝试了这两种方法,但仍在打印新行
      猜你喜欢
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多