¡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:
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.
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 } } |
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 🔥🔥
No hay comentarios, ¡cuéntame algo!
Me gustaría saber tu opinión. ¡Saludos!