У меня есть класс 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
. Однако я получаю сообщение об ошибке. Могу ли я узнать, как это решить?
Это ошибки, которые я получаю:
Error: Cannot make a static reference to the non-static method split(java.lang.String) from the type java.lang.String
Error: Cannot make a static reference to the non-static method split(java.lang.String) from the type java.lang.String
Error: Cannot make a static reference to the non-static method split(java.lang.String) from the type java.lang.String
Ты сейчас ни на что не делишься. Здесь вы пытаетесь статически вызвать разделение в классе String. Вам нужно разделить экземпляр строки. Все ваши методы являются статическими, поэтому, если вы хотите, чтобы они что-то разделили или подсчитали слова, вам нужно передать это значение.
public static int linecount(){
return (String.split("[\r\n]")).length;
}
Вы можете попробовать это:
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());
}
Это происходит потому, что split()
класса Нить не является статический. Посмотрите внимательно на сигнатуру метода из файла Java-документы.
public String[] split(String regex)
Как явно жалуется компилятор, вы не можете сделать статическую ссылку на нестатический метод.
Может быть, вам это нужно?
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;
}
Передайте аргумент Нить в wordCount()
, а затем выполните над ним операцию расколоть. Кроме того, вам не хватило закрывающей скобки.
Что ты тут делишь..? Ты понимаешь, что не умеешь писать 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));
}
Привет, это тоже работает, но есть ли способ сделать это без функции LineCounter и только с помощью методов linecount() и wordcount()? :)