Как подсчитать количество слов и строк в строке, разделенной System.lineSeparator ()? - PullRequest
1 голос
/ 10 апреля 2019

У меня есть класс Parser, который принимает List<String> lines в качестве своего поля. Я пытаюсь создать метод linecount() и wordcount() для вывода количества строк и слов соответственно.

Вот что у меня есть:

import java.util.*;

public class Parser{
  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 int wordcount(){
    String[] newStringArr = String.split("[\r\n]");
    int counter = (String.split("[\r\n]")).length;
    for (String a : newStringArr){
      counter = counter + (a.length() - a.replaceAll(" ", "").length());
    return counter;
  }
}

Учитывая мой список строк: List lines = Arrays.asList(new String[]{"one", "two three", ""})

если я вызову метод Parser.parse(lines).linecount(), я получу вывод 3, а метод Parser.parse(lines).wordcount() также должен дать мне вывод 3. Однако я получаю ошибку. Могу ли я узнать, как решить эту проблему?

Вот ошибки, которые я получаю:

Ошибка: невозможно сделать статическую ссылку на нестатический метод split (java.lang.String) из типа java.lang.String

Ошибка: невозможно сделать статическую ссылку на нестатический метод split (java.lang.String) из типа java.lang.String

Ошибка: невозможно сделать статическую ссылку на нестатический метод split (java.lang.String) из типа java.lang.String

Ответы [ 4 ]

2 голосов
/ 10 апреля 2019

Вы можете попробовать это:

private static String array;

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

public static int lines(){
    return (array.split("[\r\n]")).length;
}

public static int words() {
    String[] newStringArr = array.split("[\r\n]");
    int counter = (array.split("[\r\n]")).length;
    for (String a : newStringArr){
      counter = counter + (a.length() - a.replaceAll(" ", "").length());
    }
    return counter;
}

public static void main(String[] args) {
    List<String> lines = Arrays.asList(new String[]{"one", "two three", ""});
    LineCounter.parse(lines);
    System.out.println(LineCounter.lines());
    System.out.println(LineCounter.words());
}
1 голос
/ 11 апреля 2019

Это происходит потому, что split() класса String не является статическим . Посмотрите внимательно на сигнатуру метода из документов Java .

public String [] split (регулярное выражение строки)

Поскольку компилятор явно жалуется, вы не можете сделать статическую ссылку на нестатический метод.

Может быть, вам это нужно?

public static int wordcount(String myString) {
    String[] newStringArr = myString.split("[\r\n]");
    int counter = myString.split("[\r\n]").length;
    for (String a : newStringArr) {
        counter = counter + (a.length() - a.replaceAll(" ", "").length());
    }
    return counter;
}

Передайте аргумент String в wordCount() и затем выполните на нем операцию split . Кроме того, вам не хватало закрывающей скобки.

0 голосов
/ 11 апреля 2019

Что ты здесь разделяешь? Вы понимаете, что не можете написать String.split(..). вам нужно вызвать split на object ( string ), чтобы разделить его. почему бы вам не попробовать что-то вроде:

public static int getWordCount(String lines){
return lines.split(" |\n").length;//based on word separator <space>  and \n

}

    public static void main(String[] args) 
    {
        String nChars = "ABCDEF 12\nBLue";
        System.out.println(getWordCount(nChars));
    }
0 голосов
/ 10 апреля 2019

Ты сейчас ни на что не раскалываешься. Здесь вы пытаетесь статически вызвать split для класса String. Вам нужно разделить на экземпляр строки. Все ваши методы являются статическими, поэтому, если вы хотите, чтобы они что-то разбили или подсчитали слова, вам нужно передать это значение.

  public static int linecount(){
    return (String.split("[\r\n]")).length;
  }
...