0

editTextAndroidアプリのボックスに書かれたすべての単語を書き込むテキストファイルを作成しました。また、を使用してファイルの内容を読み取ろうとしましたbufferedreader。問題は、作成されたリストで最も長い単語のみを出力したいのですが、入力されたすべての文字列を比較できないようです。私のグーグルは、2 つの文字列の長さの比較に関する情報のみを提供しました。テキスト ファイルの各行の長さを比較するにはどうすればよいですか? 次に何をすべきか教えてもらえますか?

私のコードは次のようになります。

 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

テキストファイルがどのように見えるかはわかりませんが、各行に単語が 1 つしかない場合は、2 つの文字列の比較を使用できます。実際、ファイルから読み込んでいるときに、各単語/行を既に「タッチ」しているのに、なぜそれらをすぐに比較しないのですか? 私はあなたのコードを修正したので、あなたがしたいことをするはずです。

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

An easy to understand method to solve this problem is to break it into two steps.

The first step is to read all of your separate words into a big array or list. The second step is to go through the array or list, and find the longest word. I'm not sure if you want to get the longest line or the longest word. Maybe they're the same.

Anyway, for your problem specifically, you need to have:

List lines = new ArrayList<>();

Then you need to replace aBuffer += aDataRow + "\n"; with this: lines.add(aDataRow);

Then when you have finished reading the file, you simply have to have some code like this:

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();

People will recognise that you can combine the creation of the list and the reading of the file, but this method is easier to understand.

于 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 に答える