Liste des méthodes de sortie "Hello World" inutiles et créatives (Java)

Aperçu

Lorsque vous commencez à apprendre une langue, le premier programme que vous créez affiche généralement "Hello World". Dans le cas de Java, la sortie est la suivante.

HelloWorld.java


public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Hello World");
	}
}

Cependant, il peut y avoir une meilleure méthode de sortie. J'aimerais essayer différentes choses cette fois.

Exemple de programme

Spécifié en hexadécimal

Spécifiez chaque caractère en Unicode.

HelloWorld.java


public class HelloWorld {
	public static void main(String[] args) {
		String helloWorld = new String("\u0048" + 
				"\u0065" + 
				"\u006c" + 
				"\u006c" + 
				"\u006f" + 
				"\u0020" + 
				"\u0057" + 
				"\u006f" + 
				"\u0072" + 
				"\u006c" + 
				"\u0064");
		System.out.println(helloWorld);
	}
}

Résultat de l'exécution: Hello World

Spécifié en binaire

Tout d'abord, spécifiez les caractères en binaire, convertissez-les en hexadécimal, puis convertissez-les en caractères et affichez-les.

HelloWorld.java


public class HelloWorld {
	public static void main(String[] args) {
		//Tenir le nombre binaire
		String[] helloWorldLetters = {"1001000",
				"1100101",
				"1101100",
				"1101100",
				"1101111",
				"100000",
				"1010111",
				"1101111",
				"1110010",
				"1101100",
				"1100100"};
		
		//Convertissez le tableau ci-dessus en hexadécimal. Mettez le résultat de la conversion dans la variable "ligne"
		String line = "";
		for (String helloWorldLetter:helloWorldLetters) {
			int decimal = Integer.parseInt(helloWorldLetter, 2);
			//Convertir le binaire en hexadécimal
			String hex = Integer.toHexString(decimal);
			//Convertir hexadécimal en Unicode
			char letter = (char)Integer.parseInt(hex,16);
			line += letter;
		}
			
		String helloWorld = new String(line);
		System.out.println(helloWorld);
	}
}

Résultat de l'exécution: Hello World

Les processus de création "Hello" et "World" sont threadés et exécutés en parallèle

Hello et World sont créés en même temps à l'aide du traitement des threads et sortent après avoir attendu que les deux traitements soient terminés. S'il est exécutable, il ne peut pas avoir de valeur de retour, implémentez-le donc à l'aide de Callable. Tout d'abord, voici le code qui appelle le thread.

HelloWorld.java


package HelloWorld;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class HelloWorld {

	public static void main(String[] args) {
		//Variable pour stocker le résultat
		String helloWorld;
		
		//Créer un fil
		ExecutorService service = Executors.newFixedThreadPool(2);
		Future<String> future1 = service.submit(new HelloWorldCallable(0));
		Future<String> future2 = service.submit(new HelloWorldCallable(1));
		try {
			//Combinez les valeurs renvoyées en une seule
			helloWorld = future1.get() + future2.get();
			System.out.println(helloWorld);
		}catch(Exception e) {
			System.out.println(e.getMessage());
		}
	}
}

Voici le code du côté appelé.

HelloWorldCallable.java


package HelloWorld;

import java.util.concurrent.Callable;

public class HelloWorldCallable implements Callable<String>{
	//Gardez quel numéro a été appelé
	private int num;
	
	public HelloWorldCallable(int num) {
		this.num = num;
	}
	
	public String call() {
		if(this.num == 0) {
			return "Hello ";
		}else {
			return "World";
		}
	}
}

Résultat de l'exécution Hello World

Caractère créé par thread par traitement de thread

Dans l'exemple ci-dessus, il est divisé uniquement en "Bonjour" et "Monde", mais dans tous les cas, je vais essayer de les séparer pour chaque caractère.

HelloWorld.java


package HelloWorld;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class HelloWorld {

	public static void main(String[] args) {
		//Variable pour stocker le résultat
		String helloWorld = "";
		//Stocker les résultats des threads
		List<Future<String>> futures = new ArrayList<Future<String>>();
		
		//Créer un fil
		ExecutorService service = Executors.newFixedThreadPool(10);
		for(int i = 0; i < 11; i++) {
			futures.add(service.submit(new HelloWorldCallable(i)));
		}
		try {
			for (Future<String> future:futures) {
				if(future.isDone()) {
					helloWorld += future.get();
				}
			}
			System.out.println(helloWorld);
		}catch(Exception e) {
			System.out.println(e.getMessage());
		}
	}
}

HelloWorldCallable.java


package HelloWorld;

import java.util.concurrent.Callable;

public class HelloWorldCallable implements Callable<String>{
	private static String[] message = {"H","e","l","l","o"," ","W","o","r","l","d"};
	//Gardez quel numéro a été appelé
	private int num;
	
	public HelloWorldCallable(int num) {
		this.num = num;
	}
	
	public String call() {
		return message[num];
	}

}

Résultat de l'exécution: Hello World La variable statique de la classe HelloWorldCallable a quelque chose qui ressemble presque à "Hello World", mais ne vous inquiétez pas.

Récupération et sortie de "Hello World" depuis le Web

Les caractères sont tirés du titre de cette page de la version japonaise de Wikipedia. Screen Shot 2018-09-08 at 11.24.43.png

HelloWorld.java


import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class HelloWorld {
	public static void main(String[] args) {
    	System.setProperty("webdriver.chrome.driver", "Où se trouve le pilote Chrome");
    	WebDriver driver = new ChromeDriver();

    	//Site Web pour obtenir des informations
    	String url = "https://ja.wikipedia.org/wiki/Hello_world";
    	//Élément HTML contenant les informations que vous souhaitez obtenir (cette fois, le nom de classe du titre Wikipedia)
    	String target = "firstHeading";
    	
    	driver.get(url);
    	//Plusieurs résultats peuvent être obtenus car il est spécifié par le nom de la classe.
    	List<WebElement> values = driver.findElements(By.className(target)); 
    	for (WebElement t : values){
    	    String value = t.getText();
    	    //S'il est laissé tel quel, "Hello world" sera affiché, alors convertissez "w" en majuscules.
    	    String str = value.substring(0, 6)
    	    		+ value.substring(6, 7).toUpperCase()
    	    		+ value.substring(7);
    	    System.out.println(str);
    	}
	}
}

Résultat de l'exécution: Hello World

Grattage et sortie caractère par caractère à partir du Web

Dans l'exemple ci-dessus, toutes les chaînes de caractères proviennent d'un seul site, mais voici une méthode pour prendre chaque caractère d'un endroit différent sans une telle facilité. La source de chaque caractère est la partie titre de la page suivante de la version anglaise de Wikipedia.

lettre Titre du wiki Traduction en japonais(Catégorie)
H Harry Potter HarryPotter(films)
e The Human Centipede Mukadehumain(Filmlégendaire)
l Flying Spaghetti Monster Flyingspaghettimonstrereligion(religion)
l Lil Wayne LilWayne(Wrapper)
o Konjac Konnyaku(nourriture)
- Null Pointer Exceptiondepointeurnul(exception)
W Wikipedia Wikipedia(Wikipedia)
o Morgan Freeman MorganFREEMAN(Acteur)
r Starbucks Starbucks(Compagnie)
l Family guy FamilleGuy(Anime)
d Angry Birds AngryBirds(Jeu)

HelloWorld.java


import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class HelloWorld {
	public static void main(String[] args) {
		//Conserver la page Wiki
		String[] url = {"Harry_Potter",
				"The_Human_Centipede_(First_Sequence)",
				"Flying_Spaghetti_Monster",
				"Lil_Wayne",
				"Konjac",
				"Null_pointer",
				"Wikipedia",
				"Morgan_Freeman",
				"Starbucks",
				"Family_Guy",
				"Angry_Birds"};
		//Contient le numéro du caractère cible dans le titre
		int[] location = {0,2,1,2,1,4,0,1,3,4,9};
		
		String helloWorld = makeHelloWorld(url,location);
		System.out.println(helloWorld);
	}
	
	private static String makeHelloWorld(String[] url, int[] location) {
    	System.setProperty("webdriver.chrome.driver", "Où se trouve le pilote Chrome");
    	WebDriver driver = new ChromeDriver();
    	
    	//Variables qui contiennent des résultats
    	String result = "";
    	//Élément HTML avec la chaîne à obtenir(Cette fois, le nom de classe de la partie titre)
    	String target = "firstHeading";
    	
    	for (int i = 0; i < url.length; i++) {
    		driver.get("https://en.wikipedia.org/wiki/" + url[i]);
    		//Récupérer des caractères à partir d'éléments HTML
        	List<WebElement> values = driver.findElements(By.className(target)); 
        	for (WebElement t : values){
        	    String value = t.getText();
        	    //Découpez un caractère dans la chaîne de caractères acquise
        	    char letter = value.charAt(location[i]);
        	    result += letter;
        	}
    	}
    	return result;
	}
}

Résultat de l'exécution: Hello World Cela a pris beaucoup plus de temps qu'auparavant.

Le "Hello World" et traduit par la sortie de l'API Google

Les personnes qui ne veulent pas de ce type dans "Hello World" de Nante en anglais en premier lieu, laissez-le écrire "Hello World" est traduit à l'aide de l'API de Google en japonais. L'API Cloud Translation de Google est utilisée ici, mais si vous faites une demande du type https://www.googleapis.com/language/translate/v2?key=your key & q = Hello & source = en & target = ja, Screen Shot 2018-09-08 at 16.02.22.png Vous obtiendrez une réponse comme celle-ci. Utilisons-le immédiatement

HelloWorld.java


package HelloWorld;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

import org.json.JSONArray;
import org.json.JSONObject;

public class HelloWorld {

	public static void main(String[] args) {
		//Japonais avant traduction
		String ja = "Bonjour le monde";
		
		//Clé de l'utilisation de l'API de Google
		String key = "Ta clé";
		String baseUrl = "https://www.googleapis.com/language/translate/v2?key=";
		//Créez une URL à laquelle envoyer la demande
		String urlText = baseUrl + key + "&q=" + ja + "&source=ja&target=en";
		
		try {
			//Communiquer
			URL url = new URL(urlText);
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			//Spécifiez la méthode GET
			conn.setRequestMethod("GET");
			InputStream in = conn.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(in));
			StringBuilder output = new StringBuilder();
			String line;
			while ((line = reader.readLine()) != null) {
				output.append(line);
			}
			//Convertir le contenu de la réponse en type JSONObject
			JSONObject json = new JSONObject(output.toString());
			//Creusez dans la partie où le résultat est stocké
			JSONObject data = json.getJSONObject("data");
			JSONArray translations = data.getJSONArray("translations");
			JSONObject firstItem = (JSONObject)translations.get(0);
			String result = firstItem.getString("translatedText");
			System.out.println(result);
		}catch(IOException e) {
			System.out.println(e.getMessage());
		}
	}

}

Résultat de l'exécution: Hello World Vous pouvez générer Hello World sans utiliser l'anglais.

Créez un servlet sur le serveur virtuel qui renvoie simplement "Hello World"

Cette fois, créez un servlet qui renvoie simplement la réponse «Hello World», téléchargez-le sur le serveur virtuel et créez un programme qui obtient la chaîne de caractères «Hello World» en y accédant. Tout d'abord, la partie servlet.

HelloWorld.java


package HelloWorld;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet{

//Lorsqu'il est appelé par la méthode GET
public void doGet(HttpServletRequest request, HttpServletResponse response)
		      throws ServletException, IOException {
	   
      response.setContentType("text/plain");

      PrintWriter out = response.getWriter();
      out.println("Hello World");
   }
}

Je téléchargerai ceci sur un serveur virtuel créé à l'aide de Virtual Box. Je vais expliquer brièvement en supposant qu'Apache et Tomcat sont installés. Commencez par créer le répertoire suivant.

tomcat
   ┣ webapps
     ┣ HelloWorld (Nouvellement ajouté ci-dessous)
        ┗ WEB-INF
           ┣ web.xml(Sera expliqué plus tard)
           ┗ classes
              ┗ HelloWorld
                            ┗ HelloWorld.java (Celui avec le code source en haut)
     ┣ docs
     ┣ examples
     ┣ host-manager
     ┗ manager
  ┗ work

En ajustant web.xml, vous pouvez lier l'URL de la requête et le fichier servlet. La description de web.xml est la suivante.

web.xml


<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
   http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">

  <servlet>
    <servlet-name>HelloWorld</servlet-name>
    <servlet-class>HelloWorld.HelloWorld</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>HelloWorld</servlet-name>
    <url-pattern>/HelloWorldApi</url-pattern>
  </servlet-mapping>

</web-app>

De plus, nous jouerons avec les paramètres Apache. Ajoutez la description suivante au bas de httpd.conf (je pense que c'est dans / etc / httpd / conf / pour CentOS). ProxyPass /HelloWorld/ ajp://localhost:8009/HelloWorld/ Maintenant, la requête sous / HelloWorld est passée d'Apache à Tomcat.

Compilez avec la commande javac et la partie servlet est terminée. Si vous essayez de frapper l'url du navigateur, vous pouvez voir que les informations sont correctement obtenues comme indiqué ci-dessous. Screen Shot 2018-09-08 at 19.43.20.png

Enfin, créez une classe qui utilise ce servlet.

HelloWorld.java


package HelloWorld;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class HelloWorld{
	public static void main(String[] args) {
		try {
			//Url pour faire une requête au servlet
			URL url = new URL("http://192.168.33.10/HelloWorld/HelloWorldApi");
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("GET");
			InputStream in = conn.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(in));
			StringBuilder output = new StringBuilder();
			String line;
			while ((line = reader.readLine()) != null) {
				output.append(line);
			}
			System.out.println(output.toString());
		}catch(IOException e) {
			System.out.println(e.getMessage());
		}
	}
}

Résultat de l'exécution: Hello World Je peux obtenir les informations correctement.

Placez le servlet dans le docker au lieu du serveur virtuel

Dans l'exemple ci-dessus, le servlet a été placé sur le serveur virtuel, mais nous allons créer un environnement pour Apache et Tomcat avec docker et y placer le servlet. J'ai fait référence à l'article de @ shintaro123. Commencez par créer le répertoire suivant.

docker
┣ httpd
  ┣ Dockerfile (※1)
  ┣ httpd-proxy.conf
  ┗ run-httpd.sh
┗ tomcat
  ┣ Dockerfile (※2)
┣ Hello World (Ci-après, c'est le même que ci-dessus)
    ┗ WEB-INF
      ┗ web.xml
        ┗ classes
          ┗ HelloWorld
                     ┗ HelloWorld.java 
   ┗ docker-compose.yml (※3)

/docker/httpd/Dockerfile


FROM centos:7
  
RUN yum -y update && yum clean all
RUN yum -y install httpd httpd-devel gcc* make && yum clean all

ADD httpd-proxy.conf /etc/httpd/conf.d/
ADD run-httpd.sh /run-httpd.sh
RUN chmod -v +x /run-httpd.sh

CMD ["/run-httpd.sh"]

/docker/tomcat/Dockerfile


FROM tomcat:9.0.1-alpine

COPY HelloWorld /usr/local/tomcat/webapps/HelloWorld/

RUN rm -rf /usr/local/tomcat/webapps/ROOT

CMD ["catalina.sh","run"]

/docker/docker-compose.yml


version: '3'
services:
  httpd:
    container_name: httpd-container
    build: ./httpd
    ports:
      - "80:80"
  tomcat:
    container_name: tomcat-container
    build: ./tomcat
    expose:
      - "8009"
volumes:
  data: {}

cd vers / docker /

docker-compose build --no-cache
docker-compose up -d

Vous pouvez obtenir des informations du servlet en tapant la commande. Le fichier qui génère Hello World est le même que lorsque le servlet est placé sur le serveur virtuel.

Générez une chaîne de caractères aléatoire, attendez "Hello World" et sortez

C'est l'idée de Kilisame. Il crée une chaîne de caractères au hasard et la sort quand elle devient "Hello World". Si la chaîne de caractères est générée de manière complètement aléatoire, elle ne se terminera pas indéfiniment, de sorte que les caractères sont choisis au hasard parmi les huit types de caractères "H", "e", "l", "o", "", "W", "r" et "d". Tracer une ligne.

HelloWorld.java


package HelloWorld;

import java.util.Random;

public class HelloWorld{
	public static void main(String[] args) {
		final String[] letters = {"H","e","l","o"," ","W","r","d"};
		
		Random random = new Random();
		//Contient une chaîne générée aléatoirement
		String helloWorld = "";
		//Si vrai, quittez l'instruction while ci-dessous
		boolean done = false;
		//Comme c'est un gros problème, gardez une trace du nombre de boucles que vous avez réussi
		double count = 0;
		while (done == false) {
			count += 1;
			helloWorld = "";
			for (int i = 0; i < 11; i++) {
				int randomNum = random.nextInt(8);
				String helloChar = letters[randomNum];
				helloWorld += helloChar;
			}
			if(helloWorld.equals("Hello World")) {
				done = true;
			}
			System.out.println(helloWorld);
		}
		System.out.println(helloWorld);
		System.out.println("At " + count + "th Time");
		
	}

}

Résultat de l'exécution: Hello World At 7.98865771E8th Time 798685771e succès

Résumé

Hello World semble être bon pour une sortie normale. Si vous proposez une méthode de sortie Hello World plus complexe, écrivez-la dans les commentaires.

Recommended Posts

Liste des méthodes de sortie "Hello World" inutiles et créatives (Java)
Java, bonjour le monde!
Java Hello World
"Hello World" en Java
Apprendre Java (1) - Hello World
Créer un environnement Java et afficher hello world [Débutant]
Hello World en Java
java bonjour le monde, compilez, exécutez
Les débutants en Java lisent Hello World
Liste des méthodes Java (mémoire) (en construction)
Hello World pour le plugin Java ImageJ
Hello World avec AWS Lambda + Java
Bonjour le monde de Java dans Eclipse maintenant
Bonjour tout le monde en Java et Gradle
Méthode Java
java (méthode)
Bonjour tout le monde avec le moteur de modèle Java Thymeleaf
Méthode de liste
Développement Java avec Codenvy: Hello World! Run
Méthode Java
Hello World sur Mac VSCode Java
[Java] méthode
Construction d'un environnement Java minimal et Hello World
[Java] méthode
Sortie de Hello World dans la fonction principale simple de kotlin
Jusqu'à ce que vous installiez Gradle et sortiez "Hello World"
[Java] Hello World avec Java 14 x Spring Boot 2.3 x JUnit 5 ~
Afficher "Hello World" dans le navigateur à l'aide de Java
Afficher "Hello World" dans le navigateur à l'aide de Java
[Java] sortie, variables
Mémorandum Java (liste)
Clonez la liste Java.
Référence de la méthode Java8
Lire "Hello world"
[Java] méthode forEach
Bonjour Java Lambda
référence de la méthode java8
[Java] Méthode aléatoire
[Java] méthode de fractionnement