У меня есть небольшая программа, которая обращается к буферу обмена и экранирует / выводит текст с помощью строковых литералов Java
У меня есть ярлык на панели быстрого запуска, поэтому единственное, что мне нужно сделать, это
Ctrl+C, Click jar, Ctrl+V
Либо, когда я хочу запустить свой «код» в инструмент SQL, или наоборот.
Поэтому у меня обычно есть что-то вроде этого:
String query =
"SELECT a.fieldOne, b.fieldTwo \n"+
"FROM TABLE_A a, TABLE b \n"+
"... etc. etc. etc";
logger.info("Executing " + query );
PreparedStatement pstmt = connection.prepareStatement( query );
....etc.
Который превращается в:
SELECT a.fieldOne, b.fieldTwo
FROM TABLE_A a, TABLE b
... etc. etc. etc
Либо потому, что в некоторых проектах я не могу создать отдельные файлы, либо потому что я параноик и чувствую, что некоторые биты будут вставлены / удалены при чтении из внешнего файла (обычно это невидимый \ n, который делает
select a,b,c
from
в
select a,b,cfrom
Идея IntelliJ делает то же самое для вас автоматически, но просто от простого к коду.
Вот старая версия, которую я восстановил. Его немного сломано и не справляется?
Дайте мне знать, если кто-то улучшит это.
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.ClipboardOwner;
import java.awt.datatransfer.Transferable;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
/**
* Transforms a plain string from the clipboard into a Java
* String literal and viceversa.
* @author <a href="http://stackoverflow.com/users/20654/oscar-reyes">Oscar Reyes</a>
*/
public class ClipUtil{
public static void main( String [] args )
throws UnsupportedFlavorException,
IOException {
// Get clipboard
Toolkit toolkit = Toolkit.getDefaultToolkit();
Clipboard clipboard = toolkit.getSystemClipboard();
// get current content.
Transferable transferable = clipboard.getContents( new Object() );
String s = ( String ) transferable.getTransferData(
DataFlavor.stringFlavor );
// process the content
String result = process( s );
// set the result
StringSelection ss = new StringSelection( result );
clipboard.setContents( ss, ss );
}
/**
* Transforms the given string into a Java string literal
* if it represents plain text and viceversa.
*/
private static String process( String s ){
if( s.matches( "(?s)^\\s*\\\".*\\\"\\s*;$" ) ) {
return s.replaceAll("\\\\n\\\"\\s*[+]\n\\s*\\\"","\n")
.replaceAll("^\\s*\\\"","")
.replaceAll("\\\"\\s*;$","");
}else{
return s.replaceAll("\n","\\\\n\\\" +\n \\\" ")
.replaceAll("^"," \\\"")
.replaceAll("$"," \\\";");
}
}
}