2013-02-16 2 views
0

텍스트 파일을 만들면 안드로이드 응용 프로그램의 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

+0

해피 프로그래밍 @chArm :) – fabspro

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

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(); 
     } 
    }); 
관련 문제