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