Ocorrencia de um caracter em uma String

Galera como faço para obter o número de um determinado caracter em uma String?

Ex AAA;BBB;CCC;DDDD

Nesse caso preciso saber quantos ; tem nessa String?

Pois estou obtendo valores e usando o split, mas existem casos que só chegarão 2 ; e preciso identicar para não dar exception no split.

Existe algo na classe String que faça isso ?

public static void main(String[] args) {
    String frase = "AAA;BBB;CCC;DDD;";
    Pattern p = Pattern.compile(";");
    Matcher m = p.matcher(frase);
    int count = 0;
    while (m.find()) {
         count++;
    }    
    System.out.println(count);
}

Se você analisar a quantidade de elementos no array gerado no split já não é suficiente?

Opa!
Não gosto de postar código pronto, mas aí vai:

int numero = new String("AAA;BB;CCCCC;DD;F").split(";").length-1;
System.out.println(numero>0?""+numero:"0");

Até!

Desse jeito não funciona direito:

int numero = new String("AAA;BB;CCCCC;nn").split(";").length;

Isso aqui está retornando 4 e so tenho 3 ;

new String(“AAA;BB;CCCCC;nn”).split(";")

Retorna um array com quatro partes
AAA
BB
CCCCC
nn

Logo, é necessário fazer como o sr Bona fez.
new String(“AAA;BB;CCCCC;nn”).split(";").length - 1;

Outro exemplo que achei:

[code]
import org.apache.commons.lang.StringUtils;

public class StringUtilsExampleV1 {

public static void main(String args[]) {

System.err.println(StringUtils.countMatches(";;;;;", ";"));

}
}[/code]

expressões regulares?

String x = "AAA;BB;CCCCC;nn"; int i = x.replaceAll("[^;]","").length();

Valeu galera existem diversas maneiras de resolver o mesmo problema!, kd as estrelas não podemos mais avaliar as respostas?