Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 输出文本文件中最长的单词_Java_Android_Bufferedreader_String Length - Fatal编程技术网

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

Java 输出文本文件中最长的单词,java,android,bufferedreader,string-length,Java,Android,Bufferedreader,String Length,我已经创建了一个文本文件,将android应用程序的editText框中写入的每个单词都写入其中。我还尝试使用bufferedreader读取文件内容。问题是,我只想得到创建列表中最长单词的输出,但似乎无法比较所有输入的字符串。我的谷歌搜索只提供了关于比较两个字符串长度的信息。如何比较文本文件中每行的长度?谁能指导我下一步做什么 我的代码如下所示: try { File myFile = new File("/sdcard/logger.file"); F

我已经创建了一个文本文件,将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();
   }
}

解决这个问题的一个简单易懂的方法是将其分为两个步骤

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

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

列表行=新的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();

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

我不知道你的文本文件是什么样子,但如果每行只有一个单词,你可以使用两个字符串的比较。事实上,当你从文件中读出每个单词/行时,你已经“触摸”了,为什么你不直接比较它们呢?我修改了你的代码,所以它应该做你想做的事情

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();
}
试试看
{
File myFile=新文件(“/sdcard/logger.File”);
FileInputStream fIn=新的FileInputStream(myFile);
BufferedReader myReader=新BufferedReader(
新的InputStreamReader(fIn));
字符串最长字符串=”;
字符串aDataRow=“”;
字符串aBuffer=“”;
而((aDataRow=myReader.readLine())!=null)
{

如果(longestString.length()可以使用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();
   }
}
解决方案:

    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();
         }
    });
String longestWord=Files.readLines(新文件(“/sdcard/logger.File”)、Charsets.UTF_8、,
新的LineProcessor(){
树集=新树集(新比较器(){
@重写公共整数比较(字符串o1、字符串o2){
返回o1.length()-o2.length();
}
});
@重写公共布尔处理行(字符串行){
set.addAll(set.newHashSet(Splitter.on(“”.split(line)));
返回true;
}
@重写公共字符串getResult(){
返回set.last();
}
});

非常感谢,您的回答非常有帮助!Salamat!=)快乐编程@chArm:)谢谢您的帮助..没错,我的文本文件每行只包含一个单词。=)