2013-02-16 84 views
0

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

回答

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

一个容易理解的方法来解决这个问题是它分成两个步骤。

第一步是将所有单独的单词读入大数组或列表中。 第二步是通过数组或列表,并找到最长的单词。 我不知道你是否想得到最长的一行或最长的单词。也许他们是一样的。

无论如何,你的问题而言,你需要有:

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

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

+1

非常感谢你,你的答案是有很大的帮助!萨拉马特! =) – chArm 2013-02-16 08:19:09

+0

快乐编程@chArm :) – fabspro 2013-02-16 09:13:55

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(); 
} 
+0

谢谢你的帮助..你是对的,我的文本文件只包含每行一个单词。 =) – chArm 2013-02-16 09:11:45

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(); 
     } 
    }); 
相关问题