replaceAll

Bom dia galera eu pesquisei sobre mais eu não entendi como adicionar no meu codigo,esse codigo abaixo busca anexo no email mais o anexo que estao com espaço caracter especiais (ç) ele ta dando erro como retiro isso da minha string, usei o string = teste.replaceAll("~ç", “”); mais esta dando erro, podem me ajudar por favor

protected final Variant urimsalvarAnexoemail( Variant messageVar, Variant Caminho) throws Exception {

String teste = Caminho.getString();        
// Verifica se a mensagem passada como parâmetro é um objeto Message
Object messageObj = messageVar.getObject();
if (!(messageObj instanceof javax.mail.Message)) {
  return Variant.VARIANT_NULL;                 
}    
javax.mail.Message message = (javax.mail.Message) messageObj;
String tipoDeConteudo = message.getContentType();
if (!tipoDeConteudo.contains("multipart")) {
    return Variant.VARIANT_NULL; // não há anexos
}

javax.mail.Multipart conteudo = (javax.mail.Multipart) message.getContent();
int partes = conteudo.getCount();
for (int i = 0; i < partes; i++) { // iterar as partes e extrair os anexos
    javax.mail.Part parte = conteudo.getBodyPart(i);
    if (!parte.ATTACHMENT.equalsIgnoreCase(parte.getDisposition())) {
        continue; // essa parte não é um anexo
    }
    String nomeDoArquivo = parte.getFileName();
    teste = teste += nomeDoArquivo;
    InputStream entrada = parte.getInputStream(); // esse é o anexo do email
    OutputStream saida = new FileOutputStream(teste); // esse é o arquivo em disco        
    
   // copiar os bytes da entrada para a saida
   byte[] bytes = new byte[8192]; // buffer de 8KB
   for (int lidos = -1; (lidos = entrada.read(bytes)) != -1; saida.write(bytes, 0, lidos)) { /* for sem corpo mesmo */ }
   saida.flush();
   saida.close();     

}      
return VariantPool.get(teste);

}

Vc disse que o problema é da string, mas não disse onde ocorre o problema e nem apresentou a exceção, suponho que seja no FileOutputStream.

nomeDoArquivo = nomeDoArquivo.replaceAll("[^a-zA-Z0-9\\.\\-]", "_"));
OutputStream saida = new FileOutputStream(nomeDoArquivo);

Também não entendi a variável teste.

essa variavel teste é return com os anexo, é loop onde passa por todos os email trasendo os anexo mais o anexos que estao com caracter especial como (ç ~^) esta dando erro. eu encontrei esse codigo ele da erro - error: not a statement

java.text.Normalizer;
teste = Normalizer.normalize (teste, Form.NFD );
teste = teste.replaceAll ("[^ \ p {ASCII}]", “”);

Não faz muito sentido pra mim, mas entendi isso:

Supondo que os anexos são java.bmp, python.png e c.jpg, então o return do método será:
java.bmppython.pngc.jpg

Está imprimindo isso na exceção? Então:

teste = Normalizer.normalize (teste, Form.NFD );
teste = teste.replaceAll ("[^\\p{ASCII}]", ""); // são duas barras invertidas
return VariantPool.get(teste);

eu alterei o codigo diego continua dando erro

Capturar

// copiar os bytes da entrada para a saida
byte[] bytes = new byte[8192]; // buffer de 8KB
for (int lidos = -1; (lidos = entrada.read(bytes)) != -1; saida.write(bytes, 0, lidos)) { /* for sem corpo mesmo */ }
saida.flush();
saida.close();

    teste = Normalizer.normalize (teste, Form.NFD );
    teste = teste.replaceAll ("[^\\p{ASCII}]", ""); // são duas barras invertidas

} return VariantPool.get(teste);

Então o problema é da biblioteca que vc está usando, pois mostra que está dando erro de syntax e eu não tenho ideia de onde seja isso.

Sugiro abrir um novo tópico a respeito pois desconheço a biblioteca e também não é o problema do replaceAll, título deste tópico.

entendi,se eu removo esse anexo do meu email, não da nenhum erro eu retorno esse anexo ele da erro, e é o unico anexo que ta com nome usando ~ç