Em java, como obter substring de uma string até um caractere c?
Eu tenho uma string (que é basicamente um nome de arquivo seguindo uma convenção de nomenclatura) abc.def.ghi
Eu gostaria de extrair a substring antes da primeira .(ou seja, um ponto)
Em java doc api, não consigo encontrar um método em String que faça isso.
Estou esquecendo de algo? Como fazer isso?
olhe para String.indexOfe String.substring.
Certifique-se de verificar -1 para indexOf.
curto e grosso. Lembre-se também de que indexOf fornece o primeiro índice da substring.
— Neil Chowdhury
A resposta aceita está correta, mas não informa como usá-la. É assim que você usa as funções indexOf e substring juntas.
Este é um código inválido porque você não pode colocar uma declaração de variável no corpo de uma instrução If sem chaves.
Você pode apenas dividir a corda ..
Observe que java.lang.String.split usa o valor da expressão regular do delimitador. Basicamente assim ...
Claro, isso é dividido em várias linhas para claridade. Pode ser escrito como
— Chad Schouggins
Sua proposta não está correta, porque java.lang.String.split leva o valor regex como atributo, não apenas string. Tudo "." no seu exemplo precisa ser alterado para "\\." Então funcionará :)
Eu amo regex, mas isso me pega sempre.
Se o seu projeto já usa commons-lang , StringUtils fornece um bom método para essa finalidade:
veja javadoc [2.6] [3.1]
— Max Fichtelmann
Mais limpo do que outras soluções.
— userab
ou você pode tentar algo como
irá travar de 'c' não está na string, pois indexOf retornará -1
@Umer Hayat E se o nome do arquivo for def.hij.klm? Como o seu código funcionaria então? (Seu código só funciona para este exemplo - você também pode escrever uma função que retorne "abc"- funcionaria da mesma forma)
@Bohemian: Eu sei que faltam casos e verificações de limite. Era uma resposta específica para a pergunta específica e a ideia era dar a ideia geral através de um exemplo :).
— Umer Hayat,
@TofuBeer: Ok, bom, há uma confusão anterior "(ou seja, um ponto)" não estava lá na postagem real. Eu penso e espero que minha resposta dê uma idéia geral para resolver esse tipo de problema.
Eu iria com: int ix = inString.indexOf ('.'); if (ix> -1) inString = inString.substring (0, ix); Não sei por que Umer sugeriu subtrair 1. O segundo argumento de substring é até, mas exclui de qualquer maneira.
— Micha Berger de
Que tal usar regex?
Isso substitui tudo, do primeiro ponto ao final por "" (ou seja, ele o limpa, deixando você com o que deseja)
Eu não fiz downvote (e concordo que é uma pena quando as pessoas fazem downvote sem motivo), mas sua solução é muito cara e não é muito óbvia.
— TofuBeer,
@ Knickerless-Noggins eu posso descrever, se você quiser detalhes, eu posso fazer isso também ... mas não tenho certeza de como faria em um comentário (talvez tenha que fazer outra pergunta / resposta). É caro porque cria uma string totalmente nova junto com todos os caracteres de substituição. substring simplesmente retorna uma visão da string. Isso ajuda?
@TofuBeer você está incorreto. Strings são imutáveis . Substring não retorna uma visualização. Cada String retornada de um método String é uma nova String.
@ Knickerless-Noggins Ele está enganado ... Ver comentários recentes. Além disso, é eficiente o suficiente. A densidade do código é alta - ele teria que ser usado intensamente para justificar a adição de mais código por causa do "desempenho".
Aparentemente, mudou no JDK 7, javarevisited.blogspot.ca/2011/10/…
Em java.lang.String, você obtém alguns métodos como indexOf (): que retorna o primeiro índice de um char / string. e lstIndexOf: que retorna o último índice de String / char
Do Java Doc:
Retorna o índice dentro desta string da primeira ocorrência do caractere especificado.
Aqui está o código que retorna uma substring de a Stringaté qualquer um de uma determinada lista de caracteres: