.toUpperCase() e .replace() não estão funcionando... pq?

Galera tenho o seguinte código:

public void lerPdf() {
        File arquivoPDF = new File(this.caminhoPdfs);
            FileInputStream arquivo = null;
            try {
                arquivo = new FileInputStream(arquivoPDF);
            } catch (IOException e) {
                JOptionPane.showInputDialog("ERRO:" + e.getMessage());
            }

            PDDocument pdfDocument = null;
            try {
                PDFParser parser = new PDFParser(arquivo);
                parser.parse();
                pdfDocument = parser.getPDDocument();
                PDFTextStripper stripper = new PDFTextStripper();
                this.conteudoPdf = stripper.getText(pdfDocument);
                this.conteudoPdf.toUpperCase(); // não passa para upper case
                this.conteudoPdf.replace("\n", ""); //não troca

            } catch (IOException e) {
                JOptionPane.showInputDialog("ERRO: Não pode abrir o fluxo" + e);
            } catch (Throwable e) {
                JOptionPane.showInputDialog("ERRO: Ocorreu um erro ao obter o conteúdo do PDF" + e);
            } finally {
                if (pdfDocument != null) {
                    try {
                        pdfDocument.close();
                    } catch (IOException e) {
                        JOptionPane.showInputDialog("ERRO: Não pode fechar pdf" + e);
                    }
                }
            }
    }

No código acima eu leio um arquivo .pdf e tento passar todo o conteúdo para upper case, só que não funciona. Tentei também dar um .replace() só que não altera.
Alguém ai sabe o que é que está errado?

Não funciona é muito genérico.
Pode não funcionar por uma exception ou pode ser que não ocorra o erro, mas não passe para upperCase…

Strings são IMUTAVEIS.

Logo vc fazer

[code]
String x = “bla”;

x.toUpperCase();[/code]

não transforma a x em BLA. Agora se vc fizer

[code]
String x = “bla”;

String y = x.toUpperCase();[/code]

y será BLA e x continuará bla.

Faça um teste vc mesmo. Nesse caso o que vc acha que replace faz?

Veja o javadoc da classe String (google it!)

Alias, para que fazer um catch em Throwable ? Faça um catch em Exception para algo genérico :wink:

Se estiver curioso do porque strings serem imutáveis, leia:

você tem que direcionar para alguma variável, ex:

String teste = "BlalBlAAlaa";
teste = teste.toUpperCase();// deixa a veriável teste em uppercase
teste = teste.replace("la","ca"); // troca todos os la por ca
teste = teste.toUpperCase().replace("LA","XU");//deixa toda a frase em uppercase para trocar todos os LA por XU

é daquela forma que ele funciona.

ahh… agora eu entendi. Interpretei errado o javadoc. Quando li achei que só de passar conteudoPdf.toUpperCase já funcionaria.

Ao colega drsmachado, seu eu não passar para upper case como que eu vou comparar uma String upper case com uma que tem upper case e lower case?

Exemplo:

String nome = “Fulano”;
String nome2 = “FULANO”;

if(nome2.contains(nome){
-----ação--------
}
Teria como ele fazer sem transformar?

A respeito do .replace("\n" , " ") é que eu tenho que tirar todas as quebras de linha do pdf, pois algumas frases ele não consegue verificar por causa da quebra de linha. Não sei se essa é a forma correta de se fazer, mas foi a que eu encontrei.

para procurar a ocorrencia de uma string independente se esta em maiuscula ou não vc pode usar expressões regulares e ativar o modo ignorecase.

você poderia me dar um exemplo ou mesmo me dizer onde encontro bons tópicos falando sobre expressões regulares

Oi!

Uma expressão regular para uma String que aceite somente números, por exemplo:

String number = "1010a5"; boolean result = number.matches("[0-9]+");

Bem simples, se for ‘true’ significa que a String está de acordo com sua expressão regular, nesse caso, contém apenas números e ‘false’, caso contrário.
Exemplos:

Pattern da própria Oracle
Do GUJ
Livro de Expressão Regular Online - Ótimo

Obs: podes até dar um toLowerCase() antes de usar o matches, caso lhe interesse.

Abraços.