我需要帮助编写一个 Java 程序,该程序模拟一个支持以下操作的简单行编辑器:
$insert
每个后续行,直到下一行编辑器命令,都将插入到文本中。如果有指定的当前行,则每一行都插入到该当前行之前。否则,每一行都插入到文本的末尾。
$delete m n
文本中 m 和 n 行之间的每一行都将被删除
到目前为止,我开始我的程序如下:
我相信它允许我询问用户他们想要输入哪一行并使用链接列表方法添加行,现在我不确定下一步该做什么。任何帮助将不胜感激!
我还必须遵守某些限制:
检查不正确的命令及其参数并显示适当的消息。例如,如果文本中没有第 10 行,而用户键入第 10 行,则应显示错误消息。
使用链表存储用户提供的所有文本。这个简化的行编辑器的所有命令都以 $ 符号开头。
如果命令的语法不正确,则显示错误消息并让用户重试。
收到insert命令后,如果下一行的第一个字母不是$符号,则将其视为一行文本,存放在链表的一个节点中。如果需要,使用 StringTokenizer 逐字处理一行文本。
在收到命令或文本行后,始终显示消息“请输入命令或文本行”。始终在显示的文本中指示当前行。默认当前行为第一行,第一行编号为第 1 行。
您不能使用内置列表包
导入 java.io。; 导入 java.util。;
公共类 Program_4 { 公共静态节点头;//这就是我
public class Node //from ppt
{
String data;
Node next;
public Node()
{
data="";
next=null;
}
public Node(String x, Node n)
{
data=x;
next=n;
}
}
public void BuildList() //from ptt
{
int line_no=1;
Node q = new Node("",null);
head=q;
String oneLine;
try
{
BufferedReader indata = new BufferedReader(new InputStreamReader(System.in)); //read data from terminal
System.out.println("Please Choose a Command From the List:");
System.out.println("---------------------------------------------------------");
System.out.println("$insert");
System.out.println("$delete m n");
System.out.println("$print m n");
System.out.println("$line m");
System.out.println("$search String");
System.out.println("$done");
System.out.println("NOTE: m and n are line number parameters and string is a word you wish to search for");
System.out.println();
System.out.println("---------------------------------------------------------");
oneLine=indata.readLine();
int x=0;
while(!oneLine.equals("$done"))
{
String[] array=oneLine.split(" "); //breaks the command into an array 0,1,2
if(array[0].equals("$insert"))
{
System.out.println("Please Enter Your Text (Enter $ if you wish to terminate)");
oneLine=indata.readLine();
while(!oneLine.equals("$"))
{
String line_number = String.valueOf(line_no);
Node p = new Node(line_number +" " + oneLine, null);
q.next=p;
q=p;
line_no++;
x++;
oneLine=indata.readLine();
}
}
else if(array[0].equals("$delete"))
{
q=head.next;
Node z = new Node(q.data,q);
for(int i=1; i<x; i++)
{
String[] line=q.data.split(" ");
int lower_bound=Integer.parseInt(array[1]);
int lower_bound_2=Integer.parseInt(line[1]);
if(lower_bound==(lower_bound_2+1))
{
z=q;
break;
}
else
{
q=q.next;
}
}
for(int i=1; i<x;i++)
{
String[] line=q.data.split(" ");
if(line[0].equals(array[2]))
{
z.next=q.next;
break;
}
else
{
q=q.next;
}
}
//System.out.println(z.next.data);
}
else if(array[0].equals("$print"))
{
q=head.next;
if(array.length>1)
{
int lower_bound = Integer.parseInt(array[1]);
int upper_bound = Integer.parseInt(array[2]);
for(int i=1;i<=x;i++)
{
String[] line=q.data.split(" ");
if(line[0].equals(array[1]))
{
while(lower_bound<=upper_bound)
{
System.out.println(q.data);
q=q.next;
lower_bound++;
}
break;
}
else
{
q=q.next;
}
}
}
else
{
while(q!=null)
{
System.out.println(q.data);
q=q.next;
}
}
//see if the first array[0] is equal to m
//if it is print it out from m to n by creating a variable and doing n-m
//else q=q.next and run look again until q=!=null
}
else if(oneLine.equals("$line"))
{
System.out.println("This portion is working");
//code here for current line
}
else if(array[0].equals("$search"))
{
System.out.println("This portion is working");
//code here for search string
}
else
{
System.out.println("You have entered an incorrect command");
System.out.println("Please re-enter your Command");
}
System.out.println("Please enter your next command");
oneLine=indata.readLine();
}
System.out.println("The program is done");
}
catch(Exception e)
{
System.out.println("Error --" + e.toString());
}
}
public static void main(String[] args)
{
Program_4 mylist = new Program_4();
mylist.BuildList();
// mylist.print_list(head);