我有一个类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)进行静态引用
发生这种情况是因为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()
,然后对其执行拆分操作。此外,你错过了一个结束括号。
你可以试试这个:
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类上静态调用split。您需要拆分字符串的实例。您的所有方法都是静态的,因此如果您希望它们分割某些内容或计算您需要传递该值的单词。
public static int linecount(){
return (String.split("[\r\n]")).length;
}
你在这里分裂什么..?你意识到你不能写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));
}