Tentando resolver uma dpuvida de outro usuário, acabei ficando com uma curiosidade.
Se tenho uma string que tem o caracter \ e quero trocar esse \ por \ (duas barras), como faço?
Por tentativa e erro, cheguei ao resultado:
linha = linha.replaceAll("\\","\\\\");
Alguém pode me explicar o porquê de tantas barras para poder dar certo?
E existe outra forma mais simples e mais elegante de fazer isso? Talvez com expressões regulares?
Ficou muito feio desse jeito.
É muito menos barra, mas ainda é barra pra caramba.
Como o colega explicou existem os caracteres de escape. E quem define esses caracteres é a .
Para inserir uma quebra de linha, usa-se \n. Agora, e se você quisesse realmente escrever \n e não pular uma linha?
A solução encontrada para isso foi colocar duas barras juntas, quando se quer escrever efetivamente a .
//A string abaixo fica com o valor "\n é usado para pular uma linha"
String explic = "\n é usado para pular uma linha";
Acontece que o replaceAll usa expressões regulares. E elas são escritas em strings. Na verdade, as expressões regulares pioram o seu problema, pois elas usaram a mesma técnica. Para escrever um \ numa expressão regular, também é necessário usar \ dentro do valor da string. Agora, como o Java também considera o caracter de escape , para criar uma expressão regular contendo o valor “\” (significando uma única barra) vc terá que escrever a string “\\”.
O comando replace já troca caracteres sem usar expressão regular, por isso, você pode usar no java apenas \ (valor “”) e substuir por \\ (valor “\”).