Cabe destacar, que esta categoría contiene las clases Character,
CharacterSequence, String y Symbol. Las
instancias String son colecciones de instancias
Character. Todas ellas no se limitan al pequeño conjunto de
caracteres ASCII, al contrario pueden manejar cualquier
carácter conjunto de caracteres Unicode asociados con Códigos
Unicode. Como se ha indicado anteriormente, las clases Unicode también
pueden manejar ASCII, y son intercambiables. Por lo general,
no es necesario preocuparse por el tipo real (ASCII o Unicode)
que tiene una instancia.
Character/UnicodeCodePoint. Un carácter individual se escribe con un
prefijo «$», por ejemplo: $A o $φ. Se puede definir con el método
de clase codePoint:. Observa que puedes obtener el carácter de
cualquier carácter Unicode utilizanzo Unicode Code Point:
Character codePoint: 65 ⇒ $A Character codePoint: 966 ⇒ $φ
Hay métodos de clase para caracteres no imprimibles: Character tab,
Character lf, etc.
Además, Character define #namedCharactersMap, que te
permite entrar introducir varios caracteres Unicode fácilmente, como:
\leftright luego pulsa la barra espaciadora.
Como una cadena es una colección de caracteres, cuando iteramos una
cadena podemos utilizar los métodos de instancia de Character:
'There are 12 apples.' select: [:c |c isDigit]. ⇒ '12'
Ejemplo 3.13: Doce manzanas
Modifica el Ejemplo 3.13 para rechazar los caracteres numéricos.
Ejercicio 3.7: Seleccionar manzanas
String. String es una clase muy grande, viene con
más de 200 métodos. Es muy útil examinar estas categorías de métodos
para ver las formas habituales de agruparlos.
A veces es posible que no veas inmediatamente una categoría relacionada con lo que estás buscando.
Si esperas que un selector de método comience por una letra específica, click-select la categoría de métodos
-- all --, luego mueve el cursos sobre el panel de lista de los nombres de método. Pulsa ese carácter, p. ej.$f. Esto desplazará el panel de métodos hasta el primer método cuyo nombre comience con la letra «f».
Considera el caso en el que necesitas buscar una subcadena, una cadena
dentro de otra cadena: cuando explores la clase String, busca
categorías de métodos con nombres como finding... o
accessing. Allí encontrarás una familia de métodos
findXXX. Lee los comentarios al principio de estos métodos:
findString: subString "Answer the index of subString within the receiver, starting at start. If the receiver does not contain subString, answer 0." ^ self findString: subString startingAt: 1.
O:
findString: key startingAt: start caseSensitive: caseSensitive "Answer the index in this String at which the substring key first occurs, at or beyond start. The match can be case-sensitive or not. If no match is found, zero will be returned." ../..
A continuación, prueba los mensajes que puedan resultar interesantes en un Workspace:
'I love apples' findString: 'love' ⇒ 3 "match starts at position 3" 'I love apples' findString: 'hate' ⇒ 0 "not found" 'We humans, we all love apples' findString: 'we' ⇒ 12 'We humans, we all love apples' findString: 'we' startingAt: 1 caseSensitive: false ⇒ 1 'we humans, we all love apples' findString: 'we' ⇒ 1 'we humans, we all love apples' findString: 'we' startingAt: 2 ⇒ 12
Seguir estos caminos te llevará, en la mayoría de los casos, hacia la respuesta que estás buscando.
Queremos dar formato a una cadena del tipo ’Joe compró XX manzanas y YY naranjas’ para que quede así: ’Joe compró 5 manzanas y 4 naranjas’. ¿Qué mensaje deberíamos usar?
Ejercicio 3.8: Formatea una cadena