> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/exercicios-java/ud3-exercicios/strings.md).

# Strings

1. Define unha clase UtilidadesUsuario que conteña un método contadorCaracteres, que vai a recibir unha cadea e un caracter, e vai a determinar cantas veces se repite o caracter
2. Engade a clase UtilidadesUsuario un atributo estático LON\_CONTRASINAL no que se indica a lonxitude do contrasinal, e un método estático xerarContrasinal(), que devolve unha cadea con un contrasinal da lonxitude que conten caracteres aleatorios entre o 'a' e o 'z'.
3. Engade un método xerarContrasinalSenRepetidos(), que vai a crear un contrasinal como o do exercicio anterior, pero debe de verificar que non se repita ningún caracter do contrasinal
4. Engade un método ocultarContrasinal(), que vai a recibir un contrasinal e vai a devolver o contrasinal parcialmente oculto, unicamente visibles as duas primeiras y a última posición. Por exemplo, para o contrasinal "abcdefghi" vai a devolver "ab\*\*\*\*\*\*i". Se a lonxitude do contrasinal e menor que 3, o método lanzará unha excepción que se debe de xestionar no main.

Para realizar as probas, crea unha clase usuario con dous atributos, nome en contrasinal, que vai a contar con:

* Un constructor con un parámetro de nome
* Os getters de nome e contrasinal. Non implementes os setters
* Un método getContrasinalOculto(), que devolve o método contrasinal oculto.
* Para probar os métodos, crea unha clase App na que farás as chamadas os obxectos e as clases.
* ¿A clase Usuario que acabamos de definir é inmutble?

5. Engade un método contador de palabras, que vai a recibir unha cadea e vai a determinar o número de palabras que conten. **Importante:** Da clase String emprega unicamente os métodos charAt(), trim() e lenght(). **Inclue espaciados dobles e triples no texto de proba.**


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/exercicios-java/ud3-exercicios/strings.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
