我在计算文件中的单词数时遇到问题。我正在采取的方法是,当我看到空格或新线时,我知道要算一个字。
问题在于,如果段落之间有多行,那么我最终也将它们视为单词。如果你看一下readFile()方法,你就可以看到我在做什么。
你能帮助我并指导我如何解决这个问题吗?
示例输入文件(包括空行):
word word word
word word
word word word
答案 0 :(得分:11)
您可以使用带有FileInputStream的Scanner而不是带有FileReader的BufferedReader。例如: -
File file = new File("sample.txt");
try(Scanner sc = new Scanner(new FileInputStream(file))){
int count=0;
while(sc.hasNext()){
sc.next();
count++;
}
System.out.println("Number of words: " + count);
}
答案 1 :(得分:10)
我会改变你的方法。首先,我将使用BufferedReader
使用readLine()
逐行读取文件文件。然后使用String.split("\\s")
在空白上拆分每一行,并使用结果数组的大小来查看该行上有多少个单词。要获得字符数,您可以查看每行或每个拆分字的大小(取决于您是否要将空格计为字符)。
答案 2 :(得分:4)
这只是一个想法。有一种非常简单的方法可以做到这一点。如果您只需要多个单词而不是实际单词,那么只需使用Apache WordUtils
即可import org.apache.commons.lang.WordUtils;
public class CountWord {
public static void main(String[] args) {
String str = "Just keep a boolean flag around that lets you know if the previous character was whitespace or not pseudocode follows";
String initials = WordUtils.initials(str);
System.out.println(initials);
//so number of words in your file will be
System.out.println(initials.length());
}
}
答案 3 :(得分:3)
只需保留一个布尔标志即可让您知道前一个字符是否为空格(伪代码如下):
boolean prevWhitespace = false;
int wordCount = 0;
while (char ch = getNextChar(input)) {
if (isWhitespace(ch)) {
if (!prevWhitespace) {
prevWhitespace = true;
wordCount++;
}
} else {
prevWhitespace = false;
}
}
答案 4 :(得分:3)
import java.io.BufferedReader;
import java.io.FileReader;
public class CountWords {
public static void main (String args[]) throws Exception {
System.out.println ("Counting Words");
FileReader fr = new FileReader ("c:\\Customer1.txt");
BufferedReader br = new BufferedReader (fr);
String line = br.readLin ();
int count = 0;
while (line != null) {
String []parts = line.split(" ");
for( String w : parts)
{
count++;
}
line = br.readLine();
}
System.out.println(count);
}
}
答案 5 :(得分:2)
黑客解决方案
您可以将文本文件读入String var。然后使用单个空格作为分隔符StringVar.Split(“”)将String拆分为数组。
数组计数等于文件中“字”的数量。 当然这不会给你一个行数。
答案 6 :(得分:2)
我认为正确的方法是通过Regex:
String fileContent = <text from file>;
String[] words = Pattern.compile("\\s+").split(fileContent);
System.out.println("File has " + words.length + " words");
希望它有所帮助。 “\ s +”含义位于Pattern javadoc
答案 7 :(得分:0)
3个步骤:消耗所有空格,检查是否为一行,消耗所有非空白.3
while(true){
c = inFile.read();
// consume whitespaces
while(isspace(c)){ inFile.read() }
if (c == '\n'){ numberLines++; continue; }
while (!isspace(c)){
numberChars++;
c = inFile.read();
}
numberWords++;
}
答案 8 :(得分:0)
文件字数
如果在具有某些符号的单词之间,则可以拆分并计算单词数。
Scanner sc = new Scanner(new FileInputStream(new File("Input.txt")));
int count = 0;
while (sc.hasNext()) {
String[] s = sc.next().split("d*[.@:=#-]");
for (int i = 0; i < s.length; i++) {
if (!s[i].isEmpty()){
System.out.println(s[i]);
count++;
}
}
}
System.out.println("Word-Count : "+count);
答案 9 :(得分:0)
在这里查看我的解决方案,它应该可行。我的想法是从单词中删除所有不需要的符号,然后将这些单词分开并将它们存储在其他变量中,我使用的是ArrayList。通过调整“excludedSymbols”变量,您可以添加更多要从单词中排除的符号。
select fr.*
from fixed_rates1 fr
order by date desc
limit 1;
答案 10 :(得分:0)
这可以通过Java 8实现:
Files.lines(Paths.get(file))
.flatMap(str->Stream.of(str.split("[ ,.!?\r\n]")))
.filter(s->s.length()>0).count();
答案 11 :(得分:0)
https
答案 12 :(得分:0)
以下代码支持Java 8
//将文件读入字符串
String fileContent=new String(Files.readAlBytes(Paths.get("MyFile.txt")),StandardCharacters.UFT_8);
//通过使用分隔符
分割将这些字符串保存到字符串列表中List<String> words = Arrays.asList(contents.split("\\PL+"));
int count=0;
for(String x: words){
if(x.length()>1) count++;
}
sop(x);
答案 13 :(得分:0)
如此简单,我们可以通过以下方法从文件中获取字符串:getText();
public class Main {
static int countOfWords(String str) {
if (str.equals("") || str == null) {
return 0;
}else{
int numberWords = 0;
for (char c : str.toCharArray()) {
if (c == ' ') {
numberWords++;
}
}
return ++numberWordss;
}
}
}