如何统计由System.lineSeparator()分隔的字符串的字数和行数?

How to count the number of words and lines in a string that is separated by System.lineSeparator()?

我有一个 class ParserList<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

你们现在没有任何分歧。在这里,您正尝试在字符串 class 上静态调用 split。您需要拆分字符串的一个实例。您的所有方法都是静态的,因此如果您希望它们拆分某些内容或计算您需要传递该值的单词。

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

发生这种情况是因为 String class 的 split() 不是 static。仔细查看 Java docs.

中方法的签名

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

String参数传递给wordCount(),然后对其执行split操作。另外,您还缺少右括号。

你在这里分裂什么..?你确实意识到你不能写 String.split(..) 。您需要在 object ( string ) 上调用 split 来拆分它。 你为什么不试试这样的东西:

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