如何统计由System.lineSeparator()分隔的字符串的字数和行数?
How to count the number of words and lines in a string that is separated by System.lineSeparator()?
我有一个 class 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
的输出。但是,我收到一个错误。我可以知道如何解决这个问题吗?
这些是我遇到的错误:
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));
}
我有一个 class 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
的输出。但是,我收到一个错误。我可以知道如何解决这个问题吗?
这些是我遇到的错误:
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));
}