所以我有一个while循环,它从外部文件中捕获每一行字符串,并使用字符串标记符逐字逐句分隔它们。接下来,每个单词将进入连接的链接列表。由于每一行的大小不同,我不知道如何编程,因此链接列表会根据需要多次创建。
例如:
文件中的第一行=“你好,你好吗” 文件中的第二行=“我很好你好吗”
正如您所看到的,第二行将使用字符串标记符而不是第一行。我该如何解决这个问题?
我还是学生,还在学习,我必须使用链接列表......没有数组。
我真的很感谢你的帮助。
这是主要块的代码:
public static void main(String[] args) throws IOException
{
dataInpt=new File("C:\\sentences.txt");
inFile=new Scanner(dataInpt);
StringTokenizer myTokens;
String line, sentence;
Node node1 = new Node();
while (inFile.hasNextLine())
{
line=inFile.nextLine();
myTokens=new StringTokenizer(line);
while (myTokens.hasMoreTokens())
{
sentence=myTokens.nextToken();
你可以看到它并不完整。我不知道接下来会做什么,因为如果我做了node.value = myTokens.nextToken(); ,然后它只会将该单词保存到节点上,而不是在链接所有节点时为每个单词添加节点,因此node =“Hi”和node.next =“How”和node.next.next =“are”.. .etc。
这是Node的类:
public class Node
{
public Object value;
public Node next;
public Node()
{
value=null;
next=null;
}
public Node (Object value, Object value2, Node next)
{
this.value=value;
this.next=next;
}
}
如果您还有其他问题,请询问。我真的需要帮助。
答案 0 :(得分:0)
List list = new LinkedList<String>();
while (something) {
/* tokenise words here */
list.add(str);
}
答案 1 :(得分:0)
String line = "Hi how are you";
LinkedList<String> wordsAsList = new LinkedList<String>(
Arrays.asList(line.split("\\s+"))
)
答案 2 :(得分:0)
因此,您已使用节点实现了自己的链接列表。到目前为止,您有正确的想法:对于每一行,您将行中的每个单词分开并对其执行某些操作。因为您需要实现连接每个节点的指针,所以您可以考虑做以下事情:找出一种保存上一个字的方法,以便您可以创建节点之间的正确链接。这可能意味着需要将指针存储在最里面的while()
循环之外。
答案 3 :(得分:0)
简短回答:您不必知道列表中有多少元素。
答案越长:链表的主要好处之一是它会动态增长。如果列表中有N个节点,并且将新节点添加到列表的头部,则不需要更改现有节点。您不需要初始化新数组,复制元素或除当前添加到列表中的节点之外的任何内容。
因此,对于您的特定问题,您可能希望为文件的每一行创建一个新的链接列表,然后将该行的每个单词添加到链接列表中。完成阅读后,您将拥有一个包含该行字样的链接列表,然后您可以打印或以其他方式使用该列表。
答案 4 :(得分:0)
正如有人暗示的那样,听起来好像你希望制作一个链接列表,其每个节点都与文件的一行有关。然而,每一行都表示为它自己的单词链接列表。换句话说,您正在寻找链表的链表。我不确定你的这个分配的限制是什么,但听起来你需要推出自己的“Node”类。我建议也推荐你自己的“LinkedList”课程......但这取决于你。
Node fileHead = null;
Node lineHead = null;
Node currentLine = null;
tokenize file // Read the file in line by line
for each line in the file
Node currentWord = null; // Keep track of which word was the last added
tokenize line
for each word in the line
if lineHead is null // Check to see if this is the 1st word
lineHead = new Node(); // If so, set it to the head node for the line
lineHead.value = word;
currentWord = lineHead; // Make this your current word
else // If this isn't the 1st word of the line
Node node = new Node(); // Create a new node
node.value = word;
currentWord.next = node; // Set the previous node's "next" to the new one
currentWord = node; // Update your current node to this new one
if fileHead is null // If this is the 1st line of the file
fileHead = lineHead; // Make the 1st line's 1st word the start
currentLine = fileHead; // Update the current line to this 1st one
else // If this isn't the 1st line of the file
currentLine.next = lineHead; // Make the 1st word of this line the start of the next line
currentLine = currentLine.next; // Update the current line to this new one
lineHead = null; // Reset the head of the line to null
我不是肯定的,因为我刚刚起草了这个,但是这样的事情应该起作用,或者至少指出你正确的方向。我个人更喜欢双链表...