我在java中创建console chat program。接受用户文本输入并发送到服务器,服务器然后将其广播到所有客户端。 我想删除用户在其控制台上输入的文字。
我更喜欢独立于平台的解决方案。
import java.io.*;
class Test
{
public static void main(String args[])
{
System.out.print("you: ");
String t=getString();
System.out.println("We accepted : " + t);
}
static String getString()
{
String s;
try{
BufferedReader bufferRead = new BufferedReader(new InputStreamReader(System.in));
s = bufferRead.readLine();
//int count = 1;
//System.out.print(String.format("\033[%dA",count)); // Move up
//System.out.print("\033[2K"); // Erase line content, works on terminal but not on cmd
for(int i=0;i<s.length();i++)
System.out.print("\b"); //dont know, why it doesnt works??
}
catch(IOException e)
{e.printStackTrace(); s="Error";}
return s;
}
}
答案 0 :(得分:1)
这是我对你的问题的解释:
我是客户,我输入了一条消息“你好。”其他人都看到“你好”。但是,通过在我的控制台中键入“Hello”,消息已经存在。我不想在播音员的屏幕上看到另一个“你好”。
这是你想要实现的功能吗?如果是这样,我建议您不要删除该消息。如果您已将某些内容打印到控制台,则擦除它可能并不容易。相反,你可能永远不会发送它。
以下是我通常用于邮件系统的内容,您不希望发件人两次查看其邮件:
方便的是,每个连接到服务器的人都有一个member
对象,每个member
都有一个名称。希望名字是独一无二的。现在,如果您确保在连接到服务器时标识每个成员的名称,那么当您向所有人宣布该消息时,您只需确保不向发件人宣布该消息。
具体来说,我会修改run()
类的构造函数和announcer
方法:
String message;
String senderName;
announcer( member x , String msg ) {
senderName = x.name;
message= x.name + " : " + msg ;
}
public void run() {
for ( int i=0 ; i<server.group.size() ; i++ ) {
if ( !server.group.get( i ).name.equals( senderName ) ) {
send( server.group.get( i ).sck );
}
}
}
现在,邮件将发送给除发件人之外的所有人,从而实现将其发送给发件人然后删除它的相同结果。如果你必须编写更多代码来正确设置每个人的名字,我很抱歉,但我还没有听说任何重复消息只是从标准输出中“删除”的实现。
或者,如果您的server.group
个对象与传递给播音员构造函数的member
个对象相同,那么这将有效
String message;
member sender;
announcer( member x , String msg ) {
sender = x;
message= x.name + " : " + msg ;
}
public void run() {
for ( int i=0 ; i<server.group.size() ; i++ ) {
if ( server.group.get( i ) != sender ) {
send( server.group.get( i ).sck );
}
}
}