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.
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
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
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
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.
Les caractères sont tirés du titre de cette page de la version japonaise de Wikipedia.
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
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.
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
,
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.
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.
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.
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.
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
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