0

我创建了一个文本文件,将每个单词写入editTextandroid 应用程序的框中。我还尝试使用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();
   }
}
4

4 回答 4

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();
}
于 2013-02-16T08:31:25.503 回答
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();
   }
}
于 2013-02-16T08:34:07.910 回答
0

解决此问题的一种易于理解的方法是将其分为两个步骤。

第一步是将所有单独的单词读入一个大数组或列表中。第二步是遍历数组或列表,找到最长的单词。我不确定您是要获得最长的行还是最长的单词。也许他们是一样的。

无论如何,对于您的具体问题,您需要:

列表行 = new ArrayList<>();

然后你需要替换 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();

人们会认识到可以将列表的创建和文件的读取结合起来,但是这种方法更容易理解。

于 2013-02-16T08:00:15.123 回答
0

番石榴解决方案:

    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();
         }
    });
于 2013-02-16T10:49:54.983 回答