擦除控制台文本 java

Erase console text java

我正在 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("3[%dA",count)); // Move up
        //System.out.print("3[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;
    }
}

这是我对你的问题的解释:

我是客户,我输入一条消息,"Hello."其他人都能看到"Hello"。但是,通过在我的控制台中键入 "Hello",该消息已经存在。我不想看到播音员在我的屏幕上出现另一个 "Hello"。

这是您要实现的功能吗?如果是这样,我建议您不要删除该消息。如果你打印了一些东西来安慰,可能就不会那么容易擦掉它。相反,您一开始就不能发送它。

以下是我通常用于您不希望发件人看到他的消息两次的消息系统:

方便的是,每个连接到服务器的人都有一个 member 对象,每个 member 都有一个名字。希望名字是独一无二的。现在,如果您确保每个成员在连接到您的服务器时都得到一个名称标识,那么当您向所有人宣布消息时,您只需确保不向发件人宣布它。

具体来说,我会修改 announcer class:

的构造函数和 run() 方法
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 );
        }
    }
}

现在,消息被发送给除了发件人之外的所有人,这相当于发送给发件人然后删除它的结果。如果您必须编写更多代码才能正确设置每个人的名字,我很抱歉,但我还没有听说过任何实现中重复消息只是来自标准输出的 "erased"。

或者,如果您的 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 );
        }
    }
}