输出文本文件中最长的单词

时间:2013-02-16 07:51:43

标签: java android bufferedreader string-length

我创建了一个文本文件,用于编写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();
   }
}

4 个答案:

答案 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();
         }
    });