Как получить слова из текстового файла в односвязный список - PullRequest
0 голосов
/ 14 марта 2012

Цель этого задания - вывести список слов из файла в односвязный список, а затем отсортировать их в алфавитном порядке. Однако я не могу понять, как включить отдельные слова в связанный список. Я очень новичок в этом, и любые советы или подсказки будут очень признательны.

Вот мой Node класс, который я считаю правильным:

//Node of a singly linked list of strings
public class Node {
   private String element;
   private Node next;

   //creates a node with the given element and next

   public Node(String s, Node n){
      element = s;
      next = n;
   }

   //Returns the elements of this
   public String getElement(){
      return element;
   }
   public Node getNext(){
      return next;
   }

   //Modifier
   //Sets the element of this
   public void setElement(String newElement){
      element = newElement;
   }

   //Sets the next node of this
   public void setNext(Node newNext){
      next = newNext;
   }
}

Вот мой основной класс, который берет предложения из файла и разбивает их на отдельные слова. То есть, если у меня есть проблема, я не могу понять, как включить слова отдельных лиц в связанный список:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.*;

public class DictionaryTester{
  public static void main(String[] args) {
    try {
      BufferedReader br = new BufferedReader(new FileReader("input1"));
      String file;
      int lineNum = 1;
      while ((file = br.readLine()) != null) {
        System.out.print( "(" + lineNum++ + ") ");
        System.out.println(file.toLowerCase());

        String line = br.readLine();
        //String is split or removes the spaces and places into the array words
        String[] words = line.split(" ");

        //for loop to keep running on the length of the array
        for(int i =0; i< words.length; i++){
          //word is equal to a particular indexed spot of the word array and gets rid of all non-alphabet letters
          String word = words[i];
          word = word.replaceAll("[^a-z]", "");
        }
      }
    }
    catch (IOException e){
      System.out.println("Error: " + e.getMessage());
    }
  }
}

Другой класс, который у меня есть, - SLinkedList, который будет содержать слова в списке, но, как я уже сказал, я не могу понять, как добавить отдельные слова в список:

//Singly linked list
public class SLinkedList {
   //head node of the list
   protected Node head;

   //number of nodes in the list
   protected long size;

   //Default constructor that creates an empty list
   public SLinkedList(){
      head = null;
      size = 0;
   }
}

Я знаю, как вставить элементы односвязного списка, но попытка вставить слова в список оказалась для меня сложной задачей. Все было бы очень полезно для меня.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2016

Попробуйте это, надеюсь, это будет полезно для вас ...

import java.util.*;
import java.io.*;

public class FileLinkList
{
public static void main(String args[])throws IOException{
String content = new String();
int count=1;
File file = new File("abc.txt");
LinkedList<String> list = new LinkedList<String>();

 try {
Scanner sc = new Scanner(new FileInputStream(file));
while (sc.hasNextLine()){
content = sc.nextLine();
list.add(content);
}
sc.close();
}catch(FileNotFoundException fnf){
fnf.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
System.out.println("\nProgram terminated Safely...");
}

Collections.reverse(list);
Iterator i = list.iterator();
while (i.hasNext()) {
System.out.print("Node " + (count++) + " : ");
System.out.println(i.next());
}
 }
 }
0 голосов
/ 14 марта 2012

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

Сканер также может использовать разделители, отличные от пробелов. это Пример читает несколько элементов из строки:

 String input = "1 fish 2 fish red fish blue fish";
 Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
 System.out.println(s.nextInt());
 System.out.println(s.nextInt());
 System.out.println(s.next());
 System.out.println(s.next());
 s.close();

Зацикливание до конца файла, кеширование текущего слова и вставка его в текущий узел. Затем перейдите к следующему узлу в ссылке и повторите.

Как только вы закончите, вам нужно будет выполнить какую-то сортировку и обменяться узлами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...