我创建了一个文本文件,用于编写Android应用的editText
框中写的每个单词。我还尝试使用bufferedreader
读取文件的内容。问题是,我想得到一个输出只是创建列表中最长的单词,但我似乎无法比较输入的所有字符串。我的谷歌搜索只提供了有关比较两个字符串长度的信息。如何比较文本文件中每行的长度?有人可以指导我下一步做什么吗?
我的代码如下所示:
try
{
File myFile = new File("/sdcard/logger.file");
FileInputStream fIn = new FileInputStream(myFile);
BufferedReader myReader = new BufferedReader(
new InputStreamReader(fIn));
String aDataRow = "";
String aBuffer = "";
while ((aDataRow = myReader.readLine()) != null)
{
aBuffer += aDataRow + "\n";
}
show.setText(aBuffer);
myReader.close();
Toast.makeText(getBaseContext(),
"Done reading SD 'mysdfile.txt'",
Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
Toast.makeText(getBaseContext(), e.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
答案 0 :(得分:1)
我不知道你的文本文件是什么样的,但是如果每行只有一个单词,你可以使用两个字符串的比较。事实上,你已经从文件中读出了每个单词/行的“触摸”,为什么你不只是在那里比较它们?我修改了你的代码,所以它应该做你想做的事。
try
{
File myFile = new File("/sdcard/logger.file");
FileInputStream fIn = new FileInputStream(myFile);
BufferedReader myReader = new BufferedReader(
new InputStreamReader(fIn));
String longestString ="";
String aDataRow = "";
String aBuffer = "";
while ((aDataRow = myReader.readLine()) != null)
{
if(longestString.length()<=aDataRow.length()){
longestString = aDataRow;
}
aBuffer += aDataRow + "\n";
}
//So here you defenitly got your longestWord in "longestString"
show.setText(aBuffer);
myReader.close();
Toast.makeText(getBaseContext(),
"Done reading SD 'mysdfile.txt'",
Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
Toast.makeText(getBaseContext(), e.getMessage(),
Toast.LENGTH_SHORT).show();
}
答案 1 :(得分:1)
您可以使用java.util.Scanner,
try
{
File myFile = new File("/sdcard/logger.file");
Scanner scanner = new Scanner(myFile);
String bigWord = "";
while (scanner.hasNextLine()) {
Scanner wordScanner = new Scanner(scanner.nextLine());
while (wordScanner.hasNext()) {
String str = wordScanner.next();
if(str.length() > bigWord.lenght())
bigWord = str;
}
}
show.setText(bigWord);
Toast.makeText(getBaseContext(),
"Done reading SD 'mysdfile.txt'",
Toast.LENGTH_SHORT).show();
}
catch (Exception e)
{
Toast.makeText(getBaseContext(), e.getMessage(),
Toast.LENGTH_SHORT).show();
}
}
答案 2 :(得分:0)
解决此问题的一种易于理解的方法是将其分为两个步骤。
第一步是将所有单独的单词读入大数组或列表中。 第二步是遍历数组或列表,找到最长的单词。 我不确定你是想要获得最长的一行还是最长的一个词。也许他们是一样的。
无论如何,特别针对您的问题,您需要:
列出行=新的ArrayList&lt;&gt;();
然后你需要替换aBuffer + = aDataRow +“\ n”;使用:lines.add(aDataRow);
然后,当你读完文件后,你只需要有一些这样的代码:
int biggest = 0;
String big_word = "";
for (String row : lines) {
if (row.length() > biggest) {
biggest = row.length();
big_word = row;
}
}
Toast.makeText(getBaseContext(), "Biggest word is " + big_word, Toast.LENGTH_SHORT).show();
人们会认识到你可以结合列表的创建和文件的阅读,但这种方法更容易理解。
答案 3 :(得分:0)
Guava解决方案:
String longestWord = Files.readLines(new File("/sdcard/logger.file"), Charsets.UTF_8,
new LineProcessor<String>() {
TreeSet<String> set = new TreeSet(new Comparator<String>() {
@Override public int compare(String o1, String o2) {
return o1.length() - o2.length();
}
});
@Override public boolean processLine(String line) {
set.addAll(Sets.newHashSet(Splitter.on(" ").split(line)));
return true;
}
@Override public String getResult() {
return set.last();
}
});