import java.time.DayOfWeek; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.format.TextStyle; import java.util.Arrays; import java.util.Locale; import java.util.Scanner; public class FechasHoras { public static void main(String[] args) { // La función esViernes me devuelve... for (LocalDate fecha : diasLaborablesArray(1, 11, 2023)) { System.out.println(fecha); } System.out.println(Arrays.toString(diasLaborablesArray(1, 11, 2023))); } public static boolean esViernes() { // Fecha de hoy LocalDate hoy = LocalDate.now(); // Si hoy es viernes return hoy.getDayOfWeek() == DayOfWeek.FRIDAY; } public static int hastaelFinde() { // Fecha de hoy LocalDate hoy = LocalDate.now(); // Cogemos el día numérico de la sema 1-lunes...7 domingo int dia = hoy.getDayOfWeek().getValue(); // Si es sábado o domingo devolvemos 0 if (dia >= 6) { return 0; } else { // Devolvemos 6 menos el valor return 6 - dia; } } public static int hastaelFindeNinja() { // Obtenemos el día numérico de la semana int dia = LocalDate.now().getDayOfWeek().getValue(); // Operador ternario para devolver 0 o la resta de días como // En el ejemplo anterior // Operador ternario if comprimido // condicion ? valor si cierto : valor si falso return dia >= 6 ? 0 : 6 - dia; } public static LocalDate vencimiento(LocalDate fecha, int dias) { // Añado los días a la fecha return fecha.plusDays(dias); } public static String diaCumple(int mes, int dia) { // Creo la fecha de cumpleaños de este año LocalDate cumple = LocalDate.of(LocalDate.now().getYear(), mes, dia); // Obtengo el día de la semana en formato string return cumple.getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.of("es", "es")); } public static String diaCumpleOtro(int mes, int dia) { LocalDate cumple = LocalDate.of(LocalDate.now().getYear(), mes, dia); // Lo mismo pero usando un formateador return cumple.format(DateTimeFormatter.ofPattern("EEEE")); } public static int numFestivos(int anyo, int mes) { // Pongo la fecha del dia uno de mes LocalDate fecha = LocalDate.of(anyo, mes, 1); // Defino un contador int festivos = 0; // Mientras sigamos en este mes while (fecha.getMonthValue() == mes) { // Comparo con sábado y domingo if (fecha.getDayOfWeek() == DayOfWeek.SATURDAY || fecha.getDayOfWeek() == DayOfWeek.SUNDAY) { festivos++; } // Sumo uno al día para recorrer todos los días del mes fecha = fecha.plusDays(1); } return festivos; } public static String diasLaborables(int dia, int mes, int anyo) { // Creo la fecha que me han pasado LocalDate fecha = LocalDate.of(anyo, mes, dia); // Aquí acumularé las fechas String resultado = ""; // Contador días laborables int cont = 0; while (cont < 15) { // Si el día es laborable if (fecha.getDayOfWeek().getValue() < 6) { // Lo añado a la cadena resultado += fecha.toString() + " - "; // Sumo uno al contador cont++; } // Siempre sumo uno a la fecha fecha = fecha.plusDays(1); } return resultado; } public static LocalDate[] diasLaborablesArray(int dia, int mes, int anyo) { return diasLaborablesArray(dia,mes,anyo,15); } public static LocalDate[] diasLaborablesArray(int dia, int mes, int anyo, int numDias) { // Creo la fecha que me han pasado LocalDate fecha = LocalDate.of(anyo, mes, dia); // Aquí acumularé las fechas LocalDate[] resultado = new LocalDate[15]; // Contador días laborables int cont = 0; while (cont < numDias) { // Si el día es laborable if (fecha.getDayOfWeek().getValue() < 6) { // Lo añado a la cadena resultado[cont] = fecha; // Sumo uno al contador cont++; } // Siempre sumo uno a la fecha fecha = fecha.plusDays(1); } return resultado; } }
Ejemplos fechas en Java
LocalDate fecha = LocalDate.now(); System.out.println(fecha); System.out.println(fecha.getDayOfMonth()); System.out.println(fecha.getDayOfYear()); System.out.println(fecha.getYear()); // Crear una fecha específica LocalDate specificDate = LocalDate.of(2023, 5, 14); System.out.println(specificDate.getDayOfWeek().getValue()); LocalDate juevesproximo=fecha.plusWeeks(1); System.out.println(juevesproximo); // En temp cojo la fecha de hoy LocalDate temp=LocalDate.now(); temp=LocalDate.of(2023, 1, 1); // Miro el mes en el que estamos int mes=temp.getMonthValue(); // Mientras la fecha siga siendo del mismo mes while(temp.getMonthValue()==mes) { // Si es sábado, imprimo la fecha if (temp.getDayOfWeek()==DayOfWeek.SATURDAY) { System.out.println("Este día es sábado:"+temp); temp=temp.plusDays(7); }else { temp=temp.plusDays(1); } // Sumo un día a la fecha } temp=LocalDate.of(2023, 8, 15); // Formatear System.out.println(temp.format(DateTimeFormatter.ofPattern("dd/MM/yyyy"))); // Parsear LocalDate fechaParseada = LocalDate.parse("2022-12-03"); System.out.println("Fecha parseada: " + fechaParseada); // Parsear con un formato determinado LocalDate fechaParseada2 = LocalDate.parse("03/12/2023",DateTimeFormatter.ofPattern("dd/MM/yyyy")); System.out.println("Fecha parseada: " + fechaParseada2); // Crear una hora específica LocalTime specificTime = LocalTime.of(14, 30,50); System.out.println(specificTime); // Momento actual LocalTime ahora=LocalTime.now(); System.out.println(ahora); // Obtener partes de la hora System.out.println(ahora.getHour()); System.out.println(ahora.getMinute()); System.out.println(ahora.getNano()); // Añadir o restar partes de tiempo LocalTime momento=ahora.plusHours(2); System.out.println(momento); // Podemos parsear una cadena de caracteres LocalTime cita=LocalTime.parse("10:00:00"); System.out.println(cita); // Crear una fecha y hora específica LocalDateTime specificDateTime = LocalDateTime.of(2023, 5, 15, 14, 30); System.out.println(specificDateTime); // Obtener partes de la fecha/hora LocalDateTime esteMomento=LocalDateTime.now(); System.out.println(esteMomento); System.out.println(esteMomento.getMonthValue()); System.out.println(esteMomento.getHour()); System.out.println(esteMomento.getSecond()); System.out.println(esteMomento.getDayOfYear()); // Sumar y restar partes de tiempo esteMomento=esteMomento.plusDays(1); esteMomento=esteMomento.plusHours(1); System.out.println(esteMomento); // Parsear una fecha y una hora LocalDateTime fechahora=LocalDateTime.parse("2023-11-17T21:12:10"); System.out.println(fechahora);
Más ejemplos arrays
public static void main(String[] args) { // Resolver el problema de rellenar un array de string // Con puntos que se incrementan String[] puntos = new String[10]; String cadena = "."; for (int i = 0; i < puntos.length; i++) { puntos[i] = ".".repeat(i + 1); cadena += "."; } System.out.println(Arrays.toString(puntos)); int[] a = { 1, 20, 200, 3, 40, 50 }; int[] b = { 1, 2, 3 }; int[] c = a; // Nos comprueba si dos arrays diferentes tienen // los mismos valores System.out.println(Arrays.equals(a, b)); //Arrays.sort(a); System.out.println(Arrays.toString(a)); System.out.println(Arrays.toString(c)); // Rellena un array con un valor repetido // Arrays.fill(c, 9); System.out.println(Arrays.toString(a)); // Copia los n primeros elementos de un array int[] j = Arrays.copyOf(a, 2); System.out.println(Arrays.toString(j)); // Esto copia un rango de un array en otro int[] k = Arrays.copyOfRange(a, 1, 2); System.out.println(Arrays.toString(k)); // Compara los valores de un array y devuelve // 1 si el primero es mayor, 0 si son iguales y -1 // Si el segundo es mayor System.out.println(Arrays.compare(a, b)); // Hace una búsqueda binaria pero el arraytiene // que estar ordenado previamente int pos = Arrays.binarySearch(a, 10); System.out.println(pos); System.out.println(mayorArray(a)); System.out.println(Arrays.toString(a)); } // Devuelvo el elemento mayor de un array static int mayorArray(int[] numeros) { // Copio (clono) el array para que no se modifique en el main int[] temp=numeros.clone(); // Lo ordeno Arrays.sort(temp); // Devuelvo el ultimo return temp[temp.length - 1]; }
Ejemplos split
String frase="En un lugar de la mancha de cuyo nombre"; // Dividimos la cadena por espacio // Los espacios no se incluyen // Obtenemos un array con los elementos resultantes String[] palabras=frase.split(" "); System.out.println(Arrays.toString(palabras)); //[En, un, lugar, de, la, mancha, de, cuyo, nombre] frase="1,2,3,4,5,6"; palabras=frase.split(","); System.out.println(Arrays.toString(palabras)); //[1, 2, 3, 4, 5, 6] frase="En un lugar de la mancha de cuyo nombre"; palabras=frase.split(" "); String masLarga=""; // Recorro el array con foreach for(String palabra:palabras) { // Si la palabra en la que estoy es más larga // Que la que ya tenía la sustituyo if (palabra.length()>masLarga.length()) { masLarga=palabra; } } System.out.println("La palabra más larga es "+masLarga);
Más ejemplos Arrays
public static void main(String[] args) { // tipo[] nombredelarray=new tipo[tamaño] o {valores,...} // Con tamaño int[] cuadrados = new int[10]; // Con valores int[] notas = { 6, 3, 8, 9, 7 }; // Un tipo string String[] alumnos = { "Ana", "Eva", "Pep", "Juan" }; // recorro el array usando un for normal for (int i = 0; i < alumnos.length; i++) { System.out.println(alumnos[i]); } // recorro el array usando el foreach (solo valoes) for (String alumno : alumnos) { System.out.println(alumno); } // Recorro el array y lo modifico porque tengo el índice for (int i = 1; i <= cuadrados.length; i++) { cuadrados[i - 1] = i * i; } System.out.println(Arrays.toString(cuadrados)); // [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] // Modifico la posición 1 del array alumnos[1] = "Federica"; System.out.println(Arrays.toString(alumnos)); // [Ana, Federica, Pep, Juan] // Suma de los cuadrados que hemos generado antes int suma = 0; // Utilizo foreach porque solo quiero los valores for (int cuadrado : cuadrados) { suma += cuadrado; } System.out.println(suma); // Creo un array de un tamaño fijo Scanner sc = new Scanner(System.in); System.out.println("¿De qué tamaño quieres la lista"); int tamanyo = sc.nextInt(); // EL tamaño puede venir de una variable int[] lista = new int[tamanyo]; // Relleno el array pidiendo valores al usuario for (int i = 0; i < lista.length; i++) { System.out.println("Dime el número " + (i + 1) + ":"); lista[i] = sc.nextInt(); } sc.close(); System.out.println(Arrays.toString(lista)); int total = sumaArray(lista); System.out.println(total); // Imprimirá la suma de los número del usuario } // Creo una función que me suma todos los números // Del array que le pasemos static int sumaArray(int[] numeros) { int total = 0; // Uso el foreach nunca se modifica el array for (int numero : numeros) { total += numero; } return total; }
Arrays ejemplos
public static void main(String[] args) { // Defino una variable como entero // almacena 1 valor entero int edad = 5; // Para almacenar más de un valor del mismo tipo // se usan los arrays int[] edades = new int[5]; edades[0] = 20; edades[1] = 70; edades[2] = 8; edades[3] = 90; edades[4] = 65; for (int i = 0; i < edades.length; i++) { System.out.println(edades[i]); } int[] precios = { 20, 30, 50, 18 }; System.out.println(precios[2]); precios = new int[5]; int[] fibonacci = new int[10]; fibonacci[0] = 1; fibonacci[1] = 1; for (int i = 2; i < fibonacci.length; i++) { fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2]; } System.out.println(Arrays.toString(fibonacci)); // foreach for (int numero : fibonacci) { System.out.println(numero); } System.out.println(fibonacci); printArray(fibonacci); int[] inverso=reverseArray(fibonacci); System.out.println(Arrays.toString(inverso)); int[] otro=printArrayDuplicado(fibonacci); System.out.println(Arrays.toString(fibonacci)); int a=90; int b=a; a=25; int[] pepe=fibonacci.clone(); int[] nuevo=Arrays.copyOf(fibonacci,fibonacci.length); System.out.println(doble(a)); System.out.println(a); } public static void printArray(int[] arr) { for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } System.out.println(); } public static int[] reverseArray(int[] arr) { int[] result = new int[arr.length]; for (int i = 0; i < arr.length; i++) { result[i] = arr[arr.length - i - 1]; } return result; } public static int[] printArrayDuplicado(int[] arr) { for (int i = 0; i < arr.length; i++) { arr[i]*=2; // NO HACER NUNCA } return arr; } public static int doble(int numero) { numero*=2; return numero; }
Más ejercicios cadenas resueltos
static int contarLetra(String cadena, char letra) { int total = 0; for (int i = 0; i < cadena.length(); i++) { if (cadena.charAt(i) == letra) { total++; } } return total; } static int contarVocales(String cadena) { cadena = quitarAcentos(cadena.toLowerCase()); String vocales = "aeiou"; int total = 0; for (int i = 0; i < vocales.length(); i++) { total += contarLetra(cadena, vocales.charAt(i)); } return total; } static String sinEspacios(String cadena) { cadena = cadena.trim(); while (cadena.indexOf(" ") != -1) { cadena = cadena.replace(" ", " "); } return cadena; } static int contarChar(String cadena, char letra) { int total = 0; for (int i = 0; i < cadena.length(); i++) { if (cadena.charAt(i) == letra) { total++; } } return total; } static String eliminar(String cadena, String cadenaEliminar) { return cadena.replace(cadenaEliminar, ""); } static String cambiar(String cadena, char antiguo, char nuevo) { return cadena.replace(antiguo, nuevo); }
Ejercicios cadenas resueltos
public static void main(String[] args) { // Escribir una función que invierta el orden de los caracteres // de una cadena dada. invertir("hola")–>"aloh" String alreves=invertirCadena("cacahuete"); System.out.println(alreves); if (esPalindromo("Isaac no ronca así")) { System.out.println("Es palindromo"); } System.out.println(quitarAcentos("áéíóúàèìòùäëïöü")); // Saber si una cadena es un palíndromo // Se lee lo mismo al derecho que al revés // dabalearrozalazorraelabad // dabalearrozalazorraelabad // Sé dar la vuelta: Lo acabo de hacer // Sé quitar espacios: replace(" ", "") // quitar acentos que nos sustituya vocales acentuadas // por vocales sin acento // puedo reemplazar cada vocal acentuada por la sin acentuar // Tengo un problema: hay que encontrar el algoritmo // ¿Cómo lo hago yo? // Divide y vencerás: El problema grande se convierte // En problemas más pequeños } public static String quitarAcentos(String cadena) { String acentos="áéíóúàèìòùäëïöü"; String sinacentos="aeiou"; for(int i=0;i<acentos.length();i++) { cadena=cadena.replace(acentos.charAt(i), sinacentos.charAt(i%5)); // Aritmética modular } return cadena; } public static boolean esPalindromo(String cadena) { cadena=cadena.replace(" ",""); cadena=quitarAcentos(cadena); return cadena.equalsIgnoreCase(invertirCadena(cadena)); } public static String invertirCadena(String cadena) { // cacahuete -> eteuhacac // empiezo por el final, voy letra a letra y escribo cada letra // ¿Se empezar e ir letra a letra? Sí con un for // Se añadir esas letras a un resultado: sí, concatenando String res=""; for(int i=cadena.length()-1;i>=0;i--) { res+=cadena.charAt(i); } return res; }
Strings en Java
// Definir cadenas String nombre="Ana"; String departamento="marketing"; System.out.println(nombre+" "+ departamento); nombre="Eva"; System.out.println(nombre+" "+ departamento); // Estas tres cadenas valen lo mismo String alumno1="Ana"; String alumno2=alumno1; String alumno3="Ana"; Scanner sc=new Scanner(System.in); String alumno4=sc.next(); if (alumno1==alumno2) { System.out.println("Alumno 1 es igual al 2"); } if (alumno1==alumno3) { System.out.println("Alumno 1 es igual al 3"); } if (alumno1==alumno4) { System.out.println("Alumno 1 es igual al 4"); } // Todo este rollo es para que enendáis que si quiero // comprobar que dos cadenas son iguales // Tengo que usar equals if (alumno1.equals(alumno4)) { System.out.println("Alumno 1 es igual al 4"); } // en un tipo primitivo el nombre es una caja // En la que meto el valor int edad=5; //En los que no son primitivos (casi todos) // El nombre es una caja donde está la // posición de memoria donde está el valor String aula="Mates"; System.out.println("Dime tu ciudad"); String ciudad=sc.next(); // Comprobar si una cadena es igual a otra // siempre uso equals if (ciudad.equals("barcelona")) { System.out.println("Eres de Barcelona"); } // length es una de las muchas funciones // de la clase string System.out.println(ciudad.length()); // charAt(posicion) el caracter en esa posición String referencia="ABCDE"; System.out.println(referencia.charAt(0)); // La A // Esto me recorre todas las letras de la cadena for (int i=0;i<referencia.length();i++) { System.out.println(referencia.charAt(i)); } System.out.println(referencia.charAt(referencia.length()-1));// Último caracter for (int i=0;i<referencia.length();i++) { System.out.println(referencia.charAt(referencia.length()-i-1)); } // Obtener subcadenas de una cadena // substring(int beginIndex, int endIndex) for (int i=0;i<referencia.length();i++) { System.out.println(referencia.substring(i)); } for (int i=0;i<referencia.length();i++) { System.out.println(referencia.substring(0,i+1)); } // Buscar una cadena dentro de otra // Si la encuentra nos devuelve la posición // Si no la encuentra nos devuelve -1 String quijote="En un lugar de la mancha de cuyo nombre no quiero acordarme"; System.out.println(quijote.indexOf(" mancha")); // 18 System.out.println(quijote.indexOf("messi")); // -1 porque no lo ha encontrado System.out.println(quijote.indexOf("de")); // 12 System.out.println(quijote.indexOf("de",13)); // 25 int pos1=quijote.indexOf("de"); //12 int pos2=quijote.indexOf("de", pos1+1); //25 // Me busca todas las apariciones de la cadena buscar // Dentro de quijote String buscar="de"; int pos=quijote.indexOf(buscar); while(pos!=-1) { System.out.println(pos); pos=quijote.indexOf(buscar, pos+1); } // Reemplazar una cadena por otra // replace(CharSequence target, CharSequence replacement) String censura=quijote.replace("mancha", "###"); System.out.println(censura); String noespacios=quijote.replace(" ", ""); System.out.println(noespacios); // Convertir a mayúsculas y a minúsculas // toUpperCase() y toLowerCase() System.out.println(quijote.toUpperCase()); System.out.println(quijote.toLowerCase()); ciudad=" barcelona"; if (ciudad.trim().toLowerCase().equals("barcelona")) { System.out.println("Eres de Barcelona"); } if (ciudad.equalsIgnoreCase("barcelona")) { System.out.println("Eres de Barcelona"); } ciudad.endsWith("a"); //Acaba en la letra a ciudad.startsWith("a"); // Empieza con a ciudad.trim(); // Elimina los espacios del principio y del final