Подтвердить что ты не робот

Получить читаемый текст только из буфера обмена

Я уже знаю, как получить обычный текст из буфера обмена в Java, но иногда текст закодирован в каком-то странном DataFlavor, например, при копировании из Microsoft Word или с веб-сайта или даже исходного кода из Eclipse.

Как извлечь чистый текст из этих DataFlavor s?

4b9b3361

Ответ 1

import java.awt.HeadlessException;
import java.awt.Toolkit;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;

String data = (String) Toolkit.getDefaultToolkit()
                .getSystemClipboard().getData(DataFlavor.stringFlavor); 

с помощью метода getData() и stringFlavor вы должны получить обычный текст из буфера обмена.

Если в буфере обмена есть странный текст, я думаю, это должно быть проблемой программы, которая помещает данные в буфер обмена.

Ответ 2

Вы можете использовать следующий метод получения текста буфера обмена в Java:

public String getClipBoard(){
    try {
        return (String)Toolkit.getDefaultToolkit().getSystemClipboard().getData(DataFlavor.stringFlavor);
    } catch (HeadlessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();            
    } catch (UnsupportedFlavorException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();            
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return "";
}

Ответ 3

Сначала я не работал с буфером обмена, но это кажется интересным

Из http://docstore.mik.ua/orelly/java/awt/ch16_01.htm

"Для чтения данных из буфера обмена программа вызывает метод Transferable.getTransferData(). Если данные представлены DataFlavor, которые не соответствуют классу Java (например, plainTextFlavor), getTransferData() возвращает InputStream для чтения данных."

Итак, если вы дадите ему класс, который не соответствует вам, вы получите InputStream, а затем вы можете прочитать "чистый" текст из InputStream самостоятельно.