String literal is not properly closed by a double-quote [RESOLVIDO]
5 respostas
W
Winthorp
Pessoal, preciso pegar a última string de um path. O valor destacado em vermelho no exemplo abaixo.
\Diretorio1[color=red]Diretorio2[/color]
ou
\Diretorio1\Diretorio2[color=red]Diretorio3[/color] etc.
String nome = instalacaoXml.lerAtributoNome();
A variável nome recebe uma string com o path. ex: “\Diretorio1\Diretorio2”
Quando tento usar String[] valores = nome.split(""); dá o erro:
[color=red]String literal is not properly closed by a double-quote[/color]
Eu fiz o código abaixo onde consigo o resultado, mas gostaria de saber se há uma maneira mais rápida e melhor.
String atributo = tagXml.getAttribute("nome");
StringTokenizer tipo = new StringTokenizer(atributo,"\");
List<String> token = new ArrayList<String>();
while(tipo.hasMoreTokens()){
token.add(tipo.nextToken());
}
int ultimoDaLista = token.size()- 1;
String ultimoToken = token.get(ultimoDaLista);
System.out.println("Último token: " + ultimoToken);
Obrigado.
O que você quer é muito, muito mais fácil usando a classe java.io.File. Além disso o código abaixo deve funcionar para Windows e Linux/Unix. Não misture StringTokenizer (argh - essa classe deveria ser deletada do JDK) e String.split().
FilepathArquivo=newFile("c:\temp\teste.xml");// por exemploStringnomeArquivo=pathArquivo.getName();// nomeArquivo vai receber "teste.xml"
W
Winthorp
thingol, obrigo pela resposta.
Mas o path eu leio de um XML através de uma classe Element.
Arquivo xml: O que está em vermelho é o que é recuperado pela classe Element(isso funciona normalmente)
123456
Element tagXml = null;
\restante do código para setar a variável tagXml
String atributo = tagXml.getAttribute(“nome”);\Pega o atributo nome da tag instalacao do xml, ou seja, uma string.
Acho que sua sugestão não servirá nesse caso. Dei uma olhada na API mas não achei nada semelhante.
Se tiver outra idéia, agradeço.
T
thingol
Serve, também. Um arquivo não precisa existir no disco para podermos criar um objeto File a partir dele.
FilepathArquivo=newFile(tagXml.getAttribute("nome"));// StringnomeArquivo=pathArquivo.getName();// nomeArquivo vai receber "teste.xml"
De qualquer maneira, uma forma alternativa (e mais rápida) de fazer o que você quer é:
Stringatributo=tagXml.getAttribute("nome");// aqui ele recebeu "\Projeto\AAA"Stringnome=atributo.substring(atributo.lastIndexOf('\')+1);
Leia a documentação para ver por que é que isso funciona.
W
Winthorp
Legal as informações, das duas formas que vc colocou, deu certo.
Eu li a documentação mas ainda não entendi o funcionamento desse código:
substring(int) - retorna uma nova String com os caracteres do índice especificado até o fim
lastIndexOf(String) - retorna o índice da última ocorrência daquela string passada como parâmetro.
Logo, o trecho:
1 - localiza a última posição da barra invertida na sua String
2 - Pega apenas a substring começando do índice da última barra invertida + 1 (para que a barra não seja incluída).