如何计算由System.lineSeparator()分隔的字符串中的单词和行数?

时间:2019-04-10 17:54:08

标签: java separator

我有一个类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的输出。但是,我得到一个错误。我可以知道如何解决这个问题吗?

这些是我得到的错误:

  

错误:无法静态引用非静态方法   从类型java.lang.String拆分(java.lang.String)

     

错误:无法静态引用非静态方法   从类型java.lang.String拆分(java.lang.String)

     

错误:无法静态引用非静态方法   从类型java.lang.String拆分(java.lang.String)

4 个答案:

答案 0 :(得分:2)

您可以尝试以下方法:

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 :(得分:1)

发生这种情况是因为 String 类的split()不是 static 。仔细查看Java docs中方法的签名。

  

公共字符串[]拆分(字符串正则表达式)

正如编译器明显抱怨的那样,您不能静态引用非静态方法。

也许您需要这个吗?

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 操作。此外,您还缺少右括号。

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

您打算在这里拆分什么?您确实意识到自己不能写socket.io-client。您需要在String.split(..)上调用split进行拆分。 为什么不尝试以下操作:

object ( string )