24 mayo, 2021

Segunda Evaluación Continua Java Avanzado

¡Buen día, coders! En esta oportunidad vamos a resolver una evaluación continua que nos envió un seguidor de la página. Consta de 3 problemas, Manejo de Patrones, Manejo de archivos y Patrones, Archivos y formatos,. Les dejaré la solución a este examen y cualquier duda que tengan en la sección de comentarios.


SEGUNDA EVALUACIÓN CONTINUA JAVA AVANZADO


Problema 1. Manejo de Patrones

Se pide validar mediante el empleo de patrones una cadena que supuestamente contiene un email, lo hace con cuatro comprobaciones, con un patrón cada una, la primera que no contenga como primer carácter una @, la segunda que no comience por www. , que contenga una y solo una @ y la cuarta que no contenga caracteres ilegales: 


Solución:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Problema1 {

	public static void main(String[] args) {
		System.out.print("Ingresar correo: ");
		Scanner scanner = new Scanner(System.in);
		String source = scanner.next();

		// 1ra comprobación: que no contenga como primer carácter una @
		Pattern p = Pattern.compile("@|\\."); // Patrón de búsqueda
		Matcher m = p.matcher(source); // Fuente de datos
		if (m.find() && (m.start() == 0)) { // Si lo encontró en la 1ra posición
			System.out.println("ERROR: No puede comenzar con @ o punto");
		}
		
		// o podemos hacerlo de esta forma
		/*p = Pattern.compile("^\\.|^\\@"); 
		m = p.matcher(source);
		if (m.find()) {
			System.out.println("ERROR: No puede comenzar con @ o punto");
		}*/

		// 2da comprobación: que no comience por www.
		p = Pattern.compile("^www\\.");
		Matcher m2 = p.matcher(source);
		if (m2.find()) {
			System.out.println("ERROR: No puede comenzar con www. ");
		}

		// 3ra comprobación: que contenga solo un arroba
		p = Pattern.compile("@");
		m = p.matcher(source);
		int cont = 0;
		while (m.find()) {
			cont++;
		}
		if (cont > 1)
			System.out.println("ERROR: Solo puede haber un @: " + cont);
		
		// 4ta comprobación: que contenga arroba
		p = Pattern.compile("@");
		m = p.matcher(source);
		if (!m.find()) {
			System.out.println("ERROR: No se ha encontrado el @");
		}
		
		// 5ta comprobación: que no contenga caracteres ilegales
		/*p = Pattern.compile("\\¿+|\\?+|\\°+|\\¬+|\\|+|\\!+|\\#+|\\$+|"
				+ "\\%+|\\&+|\\+|\\=+|\\’+|\\¡+|\\++|\\*+|\\~+|\\[+|\\]" 
				+ "+|\\{+|\\}+|\\^+|\\<+|\\>+|\\\"+ ");
		m = p.matcher(source);
		cont = 0;
		while (m.find()) {
			System.out.println("Se encontró el caracter '" + m.group() + 
					"' en la posición " + m.start());
			cont++;
		}
		if (cont > 0)
			System.out.println("ERROR: Se hallaron " + cont + 
					" caracteres ilegales: " + cont);*/
			
		
		// o podemos hacerlo de esta forma
		p = Pattern.compile("[^A-Za-z0-9\\.@_\\-]");
		m = p.matcher(source);
		cont = 0;
		while (m.find()) {
			System.out.println("Se encontró el caracter '" + m.group() + 
					"' en la posición " + m.start());
			cont++;
		}
		if (cont > 0)
			System.out.println("ERROR: Se hallaron " + cont + 
					" caracteres ilegales: " + cont);
		
	}
}

Resultado:

Ingresar correo: @www.jose#10%5/?@gmail.com

ERROR: No puede comenzar con @ o punto

ERROR: Solo puede haber un @: 2

Se encontró el caracter '#' en la posición 9

Se encontró el caracter '%' en la posición 12

Se encontró el caracter '/' en la posición 14

Se encontró el caracter '?' en la posición 15

ERROR: Se hallaron 4 caracteres ilegales: 4


Problema 2. Manejo de Archivos y Patrones

Realizar un motor de búsqueda que permita primero: mostrar el contenido del archivo “texto.txt” y mostrar las veces que aparecen las palabras que coincidan con el modelo ingresado por teclado en el documento. Ej. 

texto.txt

LOS DEBERES
###########
Mucho hemos escuchado sobre los derechos, sin embargo, poco escuchamos sobre nuestros deberes.
Básicamente los deberes son lo que debemos hacer para cumplir y respetar los derechos propios y de los demás (¡Yo debo hacer!). Así los derechos de nosotros terminan donde comienzan los de los demás.
La frase, trata a los demás como quieres que te traten, es un ejemplo de deber y derecho.
&&&&&&&&&&&
www.google.com
www.youtube.com
www.facebook.com
%%%%%%%%%%%
hola@gmail.com
amigos@gmail.com
dia@gmail.com
@@@@@@@@@@@
147852369


Solución:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.swing.JOptionPane;

public class Problema2 {

	public static void main(String[] args) {
		File file = new File("texto.txt");
		String ingresar = JOptionPane.showInputDialog("Patrón de texto a buscar");
		String lineaTot = "";
		
		try {
			// Lee el archivo y guarda el contenido en un String
			FileReader fr = new FileReader(file);
			BufferedReader br = new BufferedReader(fr);
			String linea;
			System.out.println("Contenido del archivo:");
			while ((linea = br.readLine()) != null) {
				System.out.println(linea);
				lineaTot += linea;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}

		System.out.println("+---------------------------+");
		System.out.println("|     Búsqueda de Texto     |");
		System.out.println("+---------------------------+");
		
		System.out.println("Patrón de texto a buscar: " + ingresar);
		Pattern p = Pattern.compile(ingresar); // el patrón (expresión)
		Matcher m = p.matcher(lineaTot); // la fuente de datos
		boolean b = false;
		int cont = 0;
		while (m.find()) { // si lo encuentra
			// imprimo
			System.out.println("Encontrado en la posición " + m.start() + ": " 
			+ m.group());
			cont++;
		}
		System.out.println("Encontrado: \"" + cont + "\" veces"); // total
	}

}

Resultado:


Contenido del archivo:
LOS DEBERES
###########
Mucho hemos escuchado sobre los derechos, sin embargo, poco escuchamos sobre nuestros deberes.
Básicamente los deberes son lo que debemos hacer para cumplir y respetar los derechos propios y de los demás (¡Yo debo hacer!). Así los derechos de nosotros terminan donde comienzan los de los demás.
La frase, trata a los demás como quieres que te traten, es un ejemplo de deber y derecho.
&&&&&&&&&&&
www.google.com
www.youtube.com
www.facebook.com
%%%%%%%%%%%
hola@gmail.com
amigos@gmail.com
dia@gmail.com
@@@@@@@@@@@
147852369
+---------------------------+
|     Búsqueda de Texto     |
+---------------------------+
Patrón de texto a buscar: [0-9]
Encontrado en la posición 525: 1
Encontrado en la posición 526: 4
Encontrado en la posición 527: 7
Encontrado en la posición 528: 8
Encontrado en la posición 529: 5
Encontrado en la posición 530: 2
Encontrado en la posición 531: 3
Encontrado en la posición 532: 6
Encontrado en la posición 533: 9
Encontrado: "9" veces


Problema 3. Archivos y Formatos

Se pide recuperar la información de la base de datos “cursos.txt” y almacenar el contenido en una matriz (Arreglo Bidimensional) de tamaño [10] [4]. Mostrar el contenido de la Matriz empleando el método Ventana. 

Considerar que la información original de los campos 2 y 3 de la matriz está en configuración regional de Perú, se pide que la información a mostrar se personalice con  el Local de Estados unidos (en, US), tanto para el Formato de Fecha (DateFormat.getDateInstance(…) ), como para el Formato de Moneda (NumberFormat.getCurrencyInstance(región)). De manera que la ventana muestre una tabla de la siguiente manera:

curso.txt

1,MySQL,12/07/2020,20
2,MySQL,13/07/2020,40
3,JDBC,14/07/2020,20
4,GUI,15/07/2020,20
5,Proyecto,16/07/2020,30


Resultado:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Font;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.StringTokenizer;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;

public class Problema3 {

	public static void main(String[] args) {
		File file = new File("cursos.txt");
		String[][] matriz = new String[10][4];

		try {
			// Leemos el contenido del archivo .txt
			FileReader fr = new FileReader(file);
			BufferedReader br = new BufferedReader(fr);
			String linea = "";
			int i = 0;

			while ((linea = br.readLine()) != null) {
				// Delimitamos la fila por ','
				StringTokenizer st = new StringTokenizer(linea, ",");
				// Guardamos los tokens en el arreglo
				matriz[i][0] = st.nextToken(); // Sesión
				matriz[i][1] = st.nextToken(); // Tema
				matriz[i][2] = cambiarFormatoDeFecha(st.nextToken()); // Fecha
				matriz[i][3] = cambiarFormatoDeMoneda(st.nextToken()); // Costo
				i++;
			}
			br.close();
		} catch (IOException e) {
			e.printStackTrace();
		}

		ventana(matriz);
	}

	public static String cambiarFormatoDeFecha(String fecha) {
		// String a Date
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		Date fechaDate = null;
		try {
			fechaDate = sdf.parse(fecha);
			System.out.println("Fecha Date: " + fechaDate);
		} catch (ParseException ex) {
			System.out.println(ex);
		}

		// Date a String
		Locale locales2[] = { new Locale("en", "US") };
		DateFormat df = DateFormat.getDateInstance(DateFormat.DEFAULT, locales2[0]);
		String fechaUSA = df.format(fechaDate);
		System.out.println("Formato de fecha EE.UU: " + fechaUSA);

		return fechaUSA;
	}

	public static String cambiarFormatoDeMoneda(String costo) {
		Locale locale[] = { new Locale("en", "US") };
		NumberFormat nf = NumberFormat.getCurrencyInstance(locale[0]);
		String moneda = nf.format(Double.parseDouble(costo));
		System.out.println("formato de moneda EE.UU: " + moneda);
		return moneda;
	}

	private static void ventana(String[][] datos) {
		final String[] nombreCol = { "Sesion", "Tema", "Fecha", "Costo" };

		JTable tabla = new JTable(datos, nombreCol);
		tabla.setFont(new Font("Arial", Font.BOLD, 18));
		tabla.setRowHeight(24);
		JScrollPane jsp = new JScrollPane(tabla);

		JFrame frame = new JFrame();
		Container c = frame.getContentPane();
		c.setLayout(new BorderLayout());
		c.add(jsp, BorderLayout.CENTER);
		frame.setSize(500, 300);
		frame.setVisible(true);
	}

}


DESARROLLO TUS ALGORITMOS 🔥🔥


✅ 1. Envía tu algoritmo.
✅ 2. Indica en qué lenguaje de Programación lo deseas.
✅ 3. Para qué fecha lo quieres.
✅ 4. De que país eres (para tu forma de pago)
✅ 5. También se desarrollan al momento.
✅ 6. Los 3 primeros ejercicios son gratis.
🔸 Explico cada ejercicio que desarrollo en el código.

No hay comentarios, ¡cuéntame algo!

Me gustaría saber tu opinión. ¡Saludos!