我有一个类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)
答案 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 )