Führen Sie den in der Zwischenablage gespeicherten Java-Code aus.

Einführung

Wollten Sie schon immer ein kleines Java-Programm ausprobieren? image.png

Von "Java9" wird "JShell" als REPL-Tool installiert. Mit Java11 ist es jetzt möglich, Java-Dateien ohne vorheriges javac auszuführen. Auch die Online-Ausführungsumgebung wie paiza.IO ist praktisch.

Es ist definitiv einfach zu tun. Ich frage mich jedoch, ob ich das Programm einfacher ausprobieren kann ... Saya: bangbang: Ich wünschte, ich könnte den Java-Code ausführen, der in der Zwischenablage steckt ...: point_up:

Also habe ich mir den Titel ausgedacht, der Java-Code ausführt, der in der Zwischenablage </ b> </ font> gespeichert ist.

Ich habe das Internet leicht durchsucht, aber soweit ich gesucht habe, ist es nicht herausgekommen, also werde ich es schaffen. (Ich brauche es überhaupt nicht, also kommt es nicht heraus ...: Kacke: Es riecht etwas mehr ...: Kacke: ist beiseite.)

ich habe es gemacht

Als Mechanismus ist es ein einfacher Mechanismus, eine Zeichenfolge aus der Zwischenablage abzurufen und die Zeichenfolge an "jshell" zu übergeben. Übrigens werden die folgenden Pakete standardmäßig in "JShell" importiert.

jshell> /import
|    import java.io.*
|    import java.math.*
|    import java.net.*
|    import java.nio.file.*
|    import java.util.*
|    import java.util.concurrent.*
|    import java.util.function.*
|    import java.util.prefs.*
|    import java.util.regex.*
|    import java.util.stream.*

Erstellen Sie zunächst ein Teil, um die Zeichenfolge aus der Zwischenablage abzurufen. Alles ist in Ordnung, aber ich habe es in Java geschrieben.

PrintClipboardString.java


import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.UnsupportedFlavorException;
import java.io.IOException;
/**
 *Gibt Zeichenfolgendaten aus der Zwischenablage aus.
 */
public class PrintClipboardString {
    /**
     *Maine
     */
    public static void main(String[] args) {
        System.out.println(getClipboardString());
    }
    /**
     *Gibt Zeichenfolgendaten aus der Zwischenablage zurück.
     * 
     * @return Gibt die Zeichenfolgendaten der Zwischenablage zurück. Gibt null zurück, wenn es sich nicht um Zeichenfolgendaten handelt.
     */
    public static String getClipboardString() {
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();

        try {
            return (String) clip.getData(DataFlavor.stringFlavor);
        } catch (UnsupportedFlavorException e) {
            return null;
        } catch (IOException e) {
            return null;
        }
    }
}

Erstellen Sie als Nächstes eine Batch-Datei (DOS), die diese "PrintClipboardString.java" verwendet. Es ist die Aufgabe, Zeichenkettendaten aus der Zwischenablage abzurufen und an "JShell" zu übergeben.

clipbord_jshell.bat


@echo off
setlocal enabledelayedexpansion

set CLIP_BOARD=
for /f "usebackq tokens=*" %%i in (`java PrintClipboardString`) do (
    set CLIP_BOARD=!CLIP_BOARD!^
%%i
)
echo =============
Echoquelle
echo =============
echo !CLIP_BOARD!
echo.

echo =============
Ergebnis der Echoausführung
echo =============
echo !CLIP_BOARD! | jshell -
echo.

pause

Da dies "DOS" ist, wird die for-Anweisung unter Berücksichtigung des Teils verwendet, der das Ergebnis der Befehlsausführung verarbeitet. Ich denke jedoch, dass dies einfach ist, da Backquotes normalerweise mit "Unix-Shell" verwendet werden können.

Ich habe es versucht

1. Ich habe versucht, eine Zeichenfolge auszugeben.

System.out.println("hello"); ↑ Kopieren Sie diesen Text (speichern Sie ihn in der Zwischenablage) und führen Sie die Batchdatei aus.

$clipbord_jshell.bat
=============
Quelle
=============
System.out.println("hello");

=============
Ausführungsergebnis
=============
hello

Drücken Sie eine beliebige Taste, um fortzufahren. . .

Gutes Gefühl: sonnig:

2. Ich habe versucht, die Matheklasse zu verwenden.

System.out.println(Math.random()); System.out.println(Math.random()); System.out.println(Math.random());

↑ Kopieren Sie diese 3 Textzeilen (speichern Sie sie in der Zwischenablage) und führen Sie die Batchdatei aus.

$clipbord_jshell.bat
=============
Quelle
=============
System.out.println(Math.random());System.out.println(Math.random());System.out.println(Math.random());

=============
Ausführungsergebnis
=============
0.13619188697681628
0.6036857063092008
0.7567411771330568

Drücken Sie eine beliebige Taste, um fortzufahren. . .

Die Quelle wird in einer Zeile angezeigt, aber das Ausführungsergebnis ist auch bei mehreren Zeilen gut. Da java.math. * Wurde bereits in JShell importiert, konnte es ohne separaten Import ausgeführt werden.

3. Ich habe noch ein paar Tage bis Weihnachten gezählt.

Ich denke, dass es viele Fälle gibt, in denen Sie das Datumsbetriebssystem relativ ausprobieren möchten.

import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; LocalDateTime d = LocalDateTime.now(); LocalDateTime c = LocalDateTime.of(2018, 12, 25 , 23, 59); System.out.println (" bis Weihnachten ... "+ ChronoUnit.DAYS.between (d, c) +" Tag "); ↑ Kopieren Sie 5 Zeilen dieses Textes (speichern Sie ihn in der Zwischenablage) und führen Sie die Batchdatei aus.

$clipbord_jshell.bat
=============
Quelle
=============
import java.time.LocalDateTime;import java.time.temporal.ChronoUnit;LocalDateTime d = LocalDateTime.now();LocalDateTime c = LocalDateTime.of(2018, 12,
 25 , 23, 59);System.out.println("Bis Weihnachten ..." + ChronoUnit.DAYS.between(d, c) + "Tag");

=============
Ausführungsergebnis
=============
20 Tage bis Weihnachten

Drücken Sie eine beliebige Taste, um fortzufahren. . .

Deketa: entspannt:

abschließend

-Es scheint, dass es verwendet werden kann, um ein Programm (abgeschlossenes Programm) auszuführen, das aus dem Internet kopiert wurde. ・ Es ist mühsam, die Standardausgabe (System.out ~) einzeln auszugeben. -Es ist leicht, versehentlich etwas anderes als Java-Code zu kopieren und auszuführen. Wütend werden: no_good_tone3: -Wenn in der Mitte ein Zeilenkommentar eingefügt wird, wird Folgendes als Kommentar betrachtet und die Logik wird überhaupt nicht ausgewertet. (Gibt es hier Raum für Verbesserungen?) ・ Ich denke, es ist ein Müllwerkzeug, aber mein Kind ist süß: Kacke: ・ Ist die Sicherheit in Ordnung? vom Infrastrukturingenieur · Ich habe nicht nachgedacht.

Das sind frohe Weihnachten: christamas_tree:

Recommended Posts