<java> Fractionner l'adresse avant et après l'adresse avec une expression régulière

Aperçu

Je vais utiliser une expression régulière en java pour diviser l'adresse avant et après l'adresse.

En entrant l'adresse depuis la console, l'adresse partagée sera affichée. * Veuillez noter que ce n'est qu'une simplification et que toutes les adresses ne peuvent pas être complètement divisées. </ font>

procédure

La procédure est la suivante

  1. Compilez une expression régulière avec la classe Pattern (java.util.regex.Pattern)
  2. Vérifiez si la chaîne de caractères saisie par la méthode find de la classe Matcher (java.util.regex.Matcher) correspond à l'expression régulière.
  3. S'il y a correspondance, les personnages sont séparés et affichés.

Pour plus de détails sur les expressions régulières, consultez ce site. https://www.sejuku.net/blog/13215

code

SplitAddress.java



import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class SplitAddress{

	public static void main(String args[]) throws Exception {
		System.out.println("Veuillez entrer votre adresse");
		Scanner sc = new Scanner(System.in);
		//Passez les caractères saisis dans la console à la méthode suivante comme argument.
		String[] ad = split(sc.nextLine());

		//Production
		System.out.println(ad[0]+"\n"+ad[1]+"\n"+ad[2]);
		sc.close();
	}

	//Méthode pour diviser l'adresse
	static String[] split(String str)throws Exception {
		String[] ad = new String[3];

		//Préparation à la génération du modèle de jugement
		//Nombre demi-largeur / nombre pleine largeur au moins une fois ou nombre chinois au moins une fois (au début de l'adresse)
		String p1 = "([0-90-9]+|[1 2 3 4 5 6 7 8 9 millions]+)+";

		//Le nombre demi-largeur / le nombre pleine largeur est 1 ou plus, le nombre chinois est 1 ou plus, ou le symbole de connexion tel que le trait d'union est 0 ou plus (contenu de l'adresse)
		String p2 = "([0-90-9]+|[1 2 3 4 5 6 7 8 9 millions]+|(Chome|Ding|adresse|Tour|problème|-|‐|-|−|de))*";

		//Nombre demi-largeur / nombre pleine largeur au moins une fois ou nombre chinois au moins une fois ou nombre/Le caractère utilisé à la fin de l'adresse tel que le nombre est une fois (fin de l'adresse)
		String p3 = "([0-90-9]+|[1 2 3 4 5 6 7 8 9 millions]+|(Chome|Ding|adresse|Tour|problème))";

		//ex)L'adresse est 2-6-Si 6, "2" est p1, "-6-"S'applique à p2 et" 6 "s'applique à p3.

		//Expressions régulières
		Pattern p = Pattern.compile(p1+p2+p3);
		Matcher m = p.matcher(str);

		//S'il existe une chaîne de caractères correspondant à l'expression régulière, divisez l'adresse avant et après
		if(m.find()) {
			ad[0] = str.substring(0,m.start());
			ad[1] = str.substring(m.start(),m.end());
			ad[2] = str.substring(m.end(),str.length());


			//40 000 3-6-Chiffres chinois comme 1+Traitement pour le temps des nombres
			//(S'il y a une chaîne de caractères correspondant à l'expression régulière de 1 nombre kanji + 1 nombre dans la partie adresse de l'adresse divisée en 3 parties, la limite de division est corrigée.)

			//1 numéro chinois + 1 chiffre
			String p4 = "[1 2 3 4 5 6 7 8 9 millions][0-90-9]";

			p = Pattern.compile(p4);
			m = p.matcher(ad[1]);
			if(m.find()) {
				String tmp = ad[1].substring(0,m.start());
				ad[0] = ad[0] + tmp;
				ad[1] = ad[1].substring(m.start(),ad[1].length());
			}

			//3-4-5 numéros comme le bâtiment Mitsui+Traitement pour le temps des nombres chinois
			String p5 = "[0-90-9][1 2 3 4 5 6 7 8 9 millions]";
			p = Pattern.compile(p5);
			m = p.matcher(ad[1]);
			if(m.find()) {
				String tmp = ad[1].substring(m.start()+1,ad[1].length());
				ad[2] = tmp + ad[2];
				ad[1] = ad[1].substring(0,m.start());
			}
		}else ad[0] = str;

		return ad;
	}
}

Résultat d'exécution

L'adresse saisie en lettres vertes et les trois lignes inférieures sont les adresses divisées.

image.png

Essayez-le! !! </ font>

Recommended Posts