1+ object Source {
2+ def main (args : Array [String ]): Unit = {
3+ // OPERACIONES CON CADENAS DE CARACTERES
4+
5+ // 1. Asignacion
6+ val saludo = " Hola, "
7+ val nombre = " Mr X"
8+
9+ // 2. Concatenacion
10+ val final_saludo_1 = saludo + nombre
11+ println(s " ${final_saludo_1}\n " )
12+ val final_saludo_2 = saludo.concat(nombre)
13+ println(s " ${final_saludo_2}\n " )
14+
15+ // 3. Operaciones "Aritmeticas"
16+ val saludoTotal = saludo* 3
17+ println(s " ${saludoTotal}\n " )
18+
19+ // 4. Subcadenas
20+ val secuencia = " 123456789"
21+ val primerSub = secuencia.substring(0 , 5 )
22+ val secondSub = secuencia.substring(3 )
23+ val thirdSub = secuencia.substring(2 ,6 )
24+ println(s " Primera subcadena $primerSub" ) // Se toma 12345
25+ println(s " Segunda subcadena $secondSub" ) // Se toma 456789
26+ println(s " Tercera subcadena $thirdSub \n " ) // Se toma 3456
27+
28+ // 5. Indexacion
29+ val char1 = final_saludo_1(1 )
30+ val char2 = final_saludo_1(2 )
31+ val char3 = final_saludo_1(3 )
32+ println(s " caracter de saludo 1 = $char1" )
33+ println(s " caracter de saludo 2 = $char2" )
34+ println(s " caracter de saludo 3 = $char3 \n " )
35+
36+ // 6. Longitud
37+ val lenghtStr = final_saludo_1.length()
38+ println(s " Longitud del saludo es $lenghtStr \n " )
39+
40+ // 7. Recorrido
41+ println(" Recorrido de Str - Forma 1: Ciclo for" )
42+ for (caracter <- final_saludo_1) {
43+ println(s " Recorriendo el String $final_saludo_1 -> $caracter" )
44+ }
45+ println(" \n Recorrido de Str - Forma 2: Metodo foreach" )
46+ final_saludo_1.foreach {
47+ caracter => println(s " Caracter: $caracter" )
48+ }
49+
50+ // 8. Mayusculas y Minusculas
51+ val salMayus = final_saludo_1.toUpperCase()
52+ val salMinus = salMayus.toLowerCase()
53+ println(s " \n Saludo en Mayuscula -> $salMayus" )
54+ println(s " Saludo en Minuscula -> $salMinus \n " )
55+
56+ // 9. Reemplazo
57+ val newName = final_saludo_1.replace(" X" , " Z" )
58+ println(s " Nuevo saludo = $newName" )
59+ val newName2 = final_saludo_1.replaceAll(" Mr X" , " Señor X" )
60+ println(s " Nuevo saludo = $newName2 \n " )
61+
62+ // 10. Division o Separacion
63+ println(s " Frase Inicial -> $final_saludo_1" )
64+ val divSal = final_saludo_1.split(" ," )
65+ println(s " Resultado de dividir -> ${divSal.toList} \n " )
66+
67+ // 11. Union
68+ val myStringList = List (" uno" , " dos" , " tres" , " cuatro" )
69+ println(s " Lista de Strings -> $myStringList.toString() " )
70+ val myString = myStringList.mkString(" , " )
71+ println(s " Strings unidos -> $myString \n " )
72+
73+ // 12. Verificacion/Contiene
74+ val word = " scala"
75+ val subChar = " al"
76+ println(s " String Base -> ${word}" )
77+ if (word.contains(subChar)) {
78+ println(s " la palabra ' ${word}' posee la cadena ' ${subChar}' \n " )
79+ }
80+ else {
81+ println(s " la palabra ' ${word}' NO posee la cadena ' ${subChar}' \n " )
82+ }
83+
84+ // 13. Eliminar espacios en Blanco
85+ val saludoNoTrim = " Hola, Mr X.... "
86+ println(s " Sin trimeo -> ' ${saludoNoTrim}' " )
87+ val saludoTrim = saludoNoTrim.trim
88+ println(s " Con trimeo -> ' ${saludoTrim}' \n " )
89+
90+ // DIFICULTAD EXTRA
91+ def palindromo (palabra : String ): Boolean = {
92+ var palabra_inver = palabra.trim.toLowerCase().reverse
93+ val numeros = Seq (" 0" , " 1" , " 2" , " 3" , " 4" , " 5" , " 6" , " 7" , " 8" , " 9" )
94+
95+ try {
96+ for (index <- numeros) {
97+ if (palabra.contains(index)) {
98+ throw new IllegalArgumentException (" Por favor ingresa una palabra, por lo menos hay un número dentro de ella" )
99+ }
100+ }
101+ return palabra_inver == palabra
102+ }
103+ catch {
104+ case e : IllegalArgumentException => println(s " Error: ${e.getMessage}" )
105+ return false
106+ }
107+ }
108+
109+ def anagrama (palabra1 : String , palabra2 : String ): Boolean = {
110+ val palabra1_clean = palabra1.trim.toLowerCase()
111+ val palabra2_clean = palabra2.trim.toLowerCase()
112+ // organizo en orden alfabetico los caracteres del String en otro String
113+ val palabra1_sorted = palabra1_clean.toCharArray.sorted.mkString(" " )
114+ val palabra2_sorted = palabra2_clean.toCharArray.sorted.mkString(" " )
115+ return palabra1_sorted == palabra2_sorted
116+ }
117+
118+ def isograma (palabra : String ): Boolean = {
119+ val palabra_clean = palabra.trim.toLowerCase()
120+ // Crear un set vacio
121+ var set_letters = Set [Char ]()
122+ for (letter <- palabra_clean) {
123+ if (set_letters.contains(letter)) {
124+ println(s " Se repite la letra ${letter}" )
125+ return false
126+ }
127+ else {
128+ set_letters + letter
129+ }
130+ }
131+ return true
132+ }
133+
134+ def run (): Unit = {
135+ println(" Ingresa la primer palabra: " )
136+ val palabra1 = scala.io.StdIn .readLine()
137+
138+ println(" Ingresa la segunda palabra: " )
139+ val palabra2 = scala.io.StdIn .readLine()
140+
141+ // Seccion Palindromo
142+ val es_palindromo1 = palindromo(palabra1)
143+ val es_palindromo2 = palindromo(palabra2)
144+
145+ if (es_palindromo1) {
146+ println(s " ${palabra1}, es palindroma " )
147+ }
148+ else {
149+ println(s " ${palabra1}, NO es palindroma " )
150+ }
151+
152+ if (es_palindromo2) {
153+ println(s " ${palabra2}, es palindroma " )
154+ }
155+ else {
156+ println(s " ${palabra2}, NO es palindroma " )
157+ }
158+
159+ // Seccion Anagrama
160+ val es_anagrama = anagrama(palabra1, palabra2)
161+ if (es_anagrama) {
162+ println(s " ${palabra1} y ${palabra2} son anagramas " )
163+ }
164+ else {
165+ println(s " ${palabra1} y ${palabra2} NO son anagramas " )
166+ }
167+
168+ // Seccion Isograma
169+ val es_isograma1 = isograma(palabra1)
170+ val es_isograma2 = isograma(palabra2)
171+
172+ if (es_isograma1) {
173+ println(s " ${palabra1}, si es isograma " )
174+ }
175+ else {
176+ println(s " ${palabra1}, NO es isograma " )
177+ }
178+
179+ if (es_isograma2) {
180+ println(s " ${palabra2}, si es isograma " )
181+ }
182+ else {
183+ println(s " ${palabra2}, NO es isograma " )
184+ }
185+ }
186+
187+ run()
188+ }
189+ }
0 commit comments