3.5 Kernel-Text

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

 CuisLogo 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.

 note 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.

 CuisLogo 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