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

问题描述 投票:1回答:4

我有一个类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的非静态方法split(java.lang.String)进行静态引用

错误:无法对类型为java.lang.String的非静态方法split(java.lang.String)进行静态引用

错误:无法对类型为java.lang.String的非静态方法split(java.lang.String)进行静态引用

java separator
4个回答
1
投票

发生这种情况是因为String类的split()不是静态的。仔细观察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(),然后对其执行拆分操作。此外,你错过了一个结束括号。


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

0
投票

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

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

0
投票

你在这里分裂什么..?你意识到你不能写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));
    }
© www.soinside.com 2019 - 2024. All rights reserved.