Почему мой метод не определен для типа java.lang.String - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть класс Parser, который принимает список строк и выводит их построчно.Я хочу, чтобы метод linecount() (который не принимает ни одного параметра) выводил общее количество строк, т.е.вызов Parser.parse(lines) даст вам

one
two three

и, следовательно, Parser.parse(lines).linecount() должен выдать 3.Однако я наткнулся на ошибку The method linecount() is undefined for the type java.lang.String.Почему это так?

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019
Parser.parse(lines).linecount();//<--------- Here is the problem

Parser.parse() возвращает a String, а linecount() - статическая функция класса Parser. Это не функция класса String. Вы не можете звонить таким образом Parser.parse(lines).linecount(), и поэтому он выдает ошибку linecount() is undefined for the type java.lang.String. Вы должны позвонить отдельно.

Parser.parse(lines);
Parser.linecount();

И вы должны заполнить List<String> lines Объект до вызова linecount().

Ваш Регекс также не прав. Заменить "[\r\n]" на "[\\r | \\n]". Вывод программы указывается в конце.

import java.util.Arrays;
import java.util.List;

public class Parser {

  private static List<String> lines;

  public static String parse(List<String> lines) {
    return String.join(System.lineSeparator(), lines);
  }

  public static int linecount() {
    String newString = String.join(System.lineSeparator(), lines);
    return (newString.split("[\\r | \\n]")).length;
  }

  public static void main(String[] args) {
    lines = Arrays.asList("one", "two three", "");
    lines.forEach(System.out::println);
    int count = Parser.linecount();
    System.out.println(count);
  }
}

Выход:

one
two three

3
0 голосов
/ 11 апреля 2019
import java.util.*;

public class Parser{
  private List<String> lines;

  public String parse(List<String> lines){
    this.lines = lines;
    return String.join(System.lineSeparator(), lines); 
  }

  public int linecount(){
    String newString = String.join(System.lineSeparator(), lines); 
    return (newString.split("[\r\n]")).length;
  }
}

main ()

Parser p = new Parse();
List lines = p.parse(Arrays.asList(new String[]{"one", "two three", ""}));
System.out.println(lines);

System.out.println(p.linecount());
...