Как исправить методы захвата и подсчета? - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть класс Parser, как показано в коде ниже:

import java.util.*;

public class Parser{

  private static List<String> lines;
  private String str;
  private int num;
  private boolean withlist;
  boolean debug = false;

  public Parser(List<String> lines){
    this.lines = lines;
    String str = "";

    if (!this.lines.isEmpty()){
      for (int i = 0; i < this.lines.size() - 1; i++){
        str += this.lines.get(i) + "\n";
      }
      str += this.lines.get(this.lines.size()-1);
    }
    this.str = str;
    this.withlist = true;
  }


  public Parser(String str){
    this.str = str;
  }

  public static Parser parse(List<String> lines){
    List<String> strings = new ArrayList<String>();
    for (int i = 0; i < lines.size(); i++){
      strings.add(String.valueOf(lines.get(i)));
    }
    return new Parser(strings);
  }

  public String toString(){
    return this.str;
  }

  public Parser linecount(){
    String[] words = this.str.split("\r\n");
    if (words.length==1 && words[0].equals("")){
      if (debug) System.out.println("Hi");
      return new Parser("0");
    }

    else{
      return new Parser(Integer.toString(words.length));
    }
  }

  public Parser wordcount(){
    String[] words = this.str.split("\\s+");
    if (words.length==1 && words[0].equals("")){
      return new Parser("0");
    }

    else{
      return new Parser(Integer.toString(words.length));
    }
  }

  public Parser echo(){
    this.str = (this.str).replaceAll("\\r\\n|\\r|\\n", " ");
    return new Parser(this.str);
  }
}

Учитывая список: List lines = Arrays.asList(new String[]{"one", "two three"}), я пытаюсь найти метод grab, который принимает строку str и выводит соответствующие строки в списке lines, который содержит конкретный str. Вот что я попробовал до сих пор:

  public Parser grab(String str){
    int size = this.lines.size();
    String newString = "";
    for (int i = 0; i < size; i++){
      if ((this.lines.get(i)).contains(str)==true){
        newString += this.lines.get(i) +"\n"; 
      }
      else{
        continue;
      }
    }
    return new Parser(newString.trim());
  }

Я должен получить следующий вывод при вызове Parser.parse(lines).grab("z").linecount().grab("0").linecount():

1

Однако вместо этого я получаю 0. Я понял, что это потому, что когда я вызываю Parser.parse(lines).grab("z").linecount().grab("0"), мой вывод - это пробел вместо 0. Могу ли я узнать, как это исправить?

...