Buscar palavras acentuadas e com caracteres especiais

Bom dia como faço uma expressão regular que encontre palavras com acento e caracteres especiais?

usa regex, [^\w]

Postei isto uma vez.

import java.util.*;
import java.util.regex.*;
import java.text.*;

class ExpressaoRegularAcentuada {
    public static void main(String[] args) {
	    String texto = "Para respondermos às perguntas que nos teem sido feitas acêrca da"
+ " ortografia adoptada pelos editores técnicos da «+Enciclopédia de"
+ " ciéncia, arte e literatura--Biblioteca de Portugal e Brasil[1]+» temos a"
+ " honra de dirijir a V. Ex.ª esta circular, e rogamos-lhe que faça tão"
+ " conhecidos, quanto em seu poder esteja, os fundamentos em que essa"
+ " ortografia assenta."

+ " Os princípios que servem de base à reforma ortográfica iniciada por nós"
+ " ambos e usada ha dois anos pelo segundo signatário desta circular, em"
+ " escritos particulares e oficiais, e em artigos publicados em alguns"
+ " papéis periódicos, são resultado de estudo consciencioso e larga"
+ " discussão dos iniciadores. São princípios deduzidos ou antes expressão"
+ " dos factos glotolójicos examinados com rigor; são todos demonstráveis, e"
+ " de simplicidade tal que os poderá compreender a sã intelijéncia, aínda"
+ " que para ela sejam estranhos os estudos de glotolojia."

+ " Vamos expô-los à apreciação pública desde já, e assim começará a"
+ " preparar-se a crítica de todos os indivíduos, que, por se prezarem de"
+ " Portugueses, não queiram que estranjeiros censurem não haver, para a"
+ " nossa formosíssima lingua, ortografia científica e uniforme a que deva"
+ " chamar-se +Ortografia Portuguesa+.";
        Pattern pat = Pattern.compile ("[\\p{L}]+");
		Collator coll = Collator.getInstance (new Locale ("pt", "BR"));
		coll.setStrength (Collator.PRIMARY);
		SortedSet<String> words = new TreeSet<String>(coll);
		Matcher mat = pat.matcher (texto);
		while (mat.find()) {
		    words.add (mat.group());
		}
/** Isto deve imprimir:
[a, acêrca, adoptada, aínda, alguns, ambos, anos, antes, apreciação, arte, artig
os, às, assenta, assim, base, Biblioteca, Brasil, censurem, chamar, ciéncia, cie
ntífica, circular, com, começará, compreender, conhecidos, consciencioso, crític
a, da, de, deduzidos, demonstráveis, desde, desta, deva, dirijir, discussão, doi
s, dos, e, editores, ela, em, Enciclopédia, escritos, essa, esta, esteja, estran
hos, estranjeiros, estudo, estudos, Ex, examinados, expô, expressão, faça, facto
s, feitas, formosíssima, fundamentos, glotolojia, glotolójicos, ha, haver, honra
, indivíduos, iniciada, iniciadores, intelijéncia, já, larga, lhe, lingua, liter
atura, los, não, nos, nossa, oficiais, ortografia, ortográfica, os, ou, papéis,
Para, particulares, pelo, pelos, perguntas, periódicos, poder, poderá, por, Port
ugal, Portuguesa, Portugueses, preparar, prezarem, princípios, pública, publicad
os, quanto, que, queiram, reforma, respondermos, resultado, rigor, rogamos, sã,
são, se, segundo, sejam, servem, seu, sido, signatário, simplicidade, tal, tão,
técnicos, teem, temos, todos, uniforme, usada, V, Vamos, ª]
 */		
		System.out.println (words);
	}
}

exemplo:

public static void main(String[] args) {
		Pattern pattern = Pattern.compile("[^\\w]");
		Matcher matcher = pattern.matcher("cabaça##");
		while(matcher.find()){
			System.out.println(matcher.group());	
		}
	}

ai tu pode implementa da forma que queira o token.

qual a utilidade de Collator?

Esse é um exemplo que eu dei quando você quer ter uma lista ordenada alfabeticamente mas ignorando a acentuação e a diferença entre minúsculas e maiúsculas.