| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 14:09:51
|
fabim
GUJ Master
![[Avatar]](/images/avatar/d4e3e8180a65648886ff348c7a6bbff5.jpg)
Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline
|
Deve haver uma explicação óbvia pra isso, não é possivel.
Pq em um mesmo método ( o método sobrecarregado substring da classe String ), o primeiro argumento tem contagem
baseada em 0, mas o segundo argumento não?
|
ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται
Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao
 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 14:30:11
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
O segundo também é baseado em zero, mas ele indica a posição do caracter POSTERIOR ao último caracter.
javadoc wrote:
substring
public String substring(int beginIndex,
int endIndex)
Returns a new string that is a substring of this string. The substring begins at the specified beginIndex and extends to the character at index endIndex - 1. Thus the length of the substring is endIndex-beginIndex.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 14:35:22
|
fabim
GUJ Master
![[Avatar]](/images/avatar/d4e3e8180a65648886ff348c7a6bbff5.jpg)
Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline
|
deu no mesmo.
se o primeiro argumetno NAO indica a posicao posterior, pq o segundo argumento sim?
malz ai thingol mas pra mim nao tem lógica não.
01234
FABIO
pra mim substring(1,2) teria que retornar "AB".
|
ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται
Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 14:36:51
|
shison
JavaBaby
![[Avatar]](/images/avatar/3458a90e2c8e0d2ddb87e1c47cc32eea.jpg)
Membro desde: 28/12/2006 01:08:46
Mensagens: 82
Offline
|
Isto por que os argumentos definem os limites da substring, ou seja, é copiado tudo que está entre os limites, tudo a partir do primeiro argumento até o último char antes do segundo argumento.
Tenha em mente que o índice é a posição do cursor e não do caractere, então estando o cursor na posição 8 ele está antes do 8º char...
veja a documentação:
This message was edited 2 times. Last update was at 29/11/2007 14:38:58
|
----
Hudson Pena Magalhães |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 14:38:01
|
jjose
Virtual Machine Man
![[Avatar]](/images/avatar/68be68a4c8ce0d9d97e5259a649ce6a4.jpg)
Membro desde: 22/05/2007 23:10:22
Mensagens: 663
Localização: Paraiba
Offline
|
a = iniciar no:
b = finalizar no:
substring(a,b)
tu informa de onde ateh onde
onde vc que e naum onde o array inicia
|
Estatísticas mostram que no RJ você corre risco de levar um tiro antes mesmo de nascer.
No RJ proporção é de uma bala perdida por cada gota de chuva.
No RJ quando o assunto é bala perdida, o óbito considera causas naturais.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 14:39:30
|
jjose
Virtual Machine Man
![[Avatar]](/images/avatar/68be68a4c8ce0d9d97e5259a649ce6a4.jpg)
Membro desde: 22/05/2007 23:10:22
Mensagens: 663
Localização: Paraiba
Offline
|
fabiocsi wrote:deu no mesmo.
se o primeiro argumetno NAO indica a posicao posterior, pq o segundo argumento sim?
malz ai thingol mas pra mim nao tem lógica não.
01234
FABIO
pra mim substring(1,2) teria que retornar "AB".
te retorno o que tem entre A e B
|
Estatísticas mostram que no RJ você corre risco de levar um tiro antes mesmo de nascer.
No RJ proporção é de uma bala perdida por cada gota de chuva.
No RJ quando o assunto é bala perdida, o óbito considera causas naturais.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 14:42:15
|
fabim
GUJ Master
![[Avatar]](/images/avatar/d4e3e8180a65648886ff348c7a6bbff5.jpg)
Membro desde: 14/12/2006 19:30:03
Mensagens: 1268
Localização: Vitoria - Espirito Santo
Offline
|
nao escrevam como se eu nao lesse javadoc.
ele mesmo é INCOERENTE.
...
Parameters:
beginIndex - the beginning index, inclusive.
endIndex - the ending index, exclusive.
...
Isso é gambiarra, ou mal feito.
Ou é baseado em 0, ou não é.
Ou é intervalo fechado, ou é intervalo aberto.
Mas no caso, 1 argumento é uma coisa, e 1 argumento é outra.
O que o método faz eu sei, como ele age eu sei nao preciso de explicação... so to dizendo que acho horrível.
|
ειπεν αυτη ο ιησους εγω ειμι η αναστασις και η ζωη ο πιστευων εις εμε καν αποθανη ζησεται
Sun Certified Web Component Developer
Sun Certified Java Programmer
Sun Certified Java Associate
Sun Certified Business Component Developer - Em Andamento
Bacharelando em Sistemas de Informacao
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 14:45:30
|
shison
JavaBaby
![[Avatar]](/images/avatar/3458a90e2c8e0d2ddb87e1c47cc32eea.jpg)
Membro desde: 28/12/2006 01:08:46
Mensagens: 82
Offline
|
Como eu disse, a lógica é que os índices são relativos a posição do cursor, e o método retorna o que está entre as posições dos cursores,, no caso você pode fazer uma analogia de quando selecionamos um texto com o mouse...
|
----
Hudson Pena Magalhães |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 14:52:38
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Eu prefiriria que o substring tivesse 2 argumentos: o índice inicial e a quantidade máxima de caracteres retornados.
Já tive de fazer um encapsulamento para o método substring porque ele é desajeitado para o uso prático.
(Por exemplo, se eu precisar de 5 caracteres mas só estiverem disponíveis 3 porque a string original era mais curta que o imaginado, não deveria ocorrer uma exception, mas retornar apenas 3 caracteres.)
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 14:58:24
|
mister__m
Virtual Machine Man
![[Avatar]](/images/avatar/89b9c689a57b82e59074c6ba09aa394d.jpg)
Membro desde: 18/03/2005 16:13:17
Mensagens: 736
Offline
|
fabiocsi wrote:nao escrevam como se eu nao lesse javadoc.
ele mesmo é INCOERENTE.
...
Parameters:
beginIndex - the beginning index, inclusive.
endIndex - the ending index, exclusive.
...
Isso é gambiarra, ou mal feito.
...
Ou é intervalo fechado, ou é intervalo aberto.
A maioria dos intervalos que nós temos em mente são semi-abertos. Por exemplo, quando você marca um compromisso das 09:30 às 10:30 na sua agenda, você espera poder marcar outro compromisso às 10:30. Essa foi a lógica usada para o substring.
No entanto, concordo que o substring sugerido pelo thingol seria mais útil em geral. Algumas linguagens têm, por padrão, funções/métodos que fazem as duas coisas.
|
Michael Nascimento Santos, aka Mister M
Summa Technologies do Brasil - http://www.summa-tech.com/
genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
Líder da JSR-310 - Date and Time API
Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
JSR Community @ java.net - http://community.java.net/jsr
Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80
Twitter - @mr__m |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 15:04:09
|
maior_abandonado
JWizard
![[Avatar]](/images/avatar/0d7c463832b871c20405a6c9296b5517.jpg)
Membro desde: 03/09/2007 11:30:08
Mensagens: 2694
Localização: sp
Offline
|
o substring sugerido pelo tingol foi uma boa ideia mesmo, por causa de que evita perda de tempo com tratamento de exceção, masi ainda assim, concordo com o que o fabio disse... ou intervalo aberto ou fechado... pode até ser que seja assim por causa do endereço do indice, mais fica estranho...
|
espero ter ajudado...
falando nisso, caso seu problema tenha sido resolvido, edite o seu primeiro post e coloque um [RESOLVIDO] no titulo do tópico.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 15:37:33
|
otaviofcs
Virtual Machine Man
![[Avatar]](/images/avatar/2509e9380eb3623ef61046dcd190275d.jpg)
Membro desde: 21/12/2006 18:01:54
Mensagens: 511
Localização: Rio de Janeiro
Offline
|
fabiocsi wrote:ele mesmo é INCOERENTE.
Fabio, concordo. Só que Java não é feito de coerência nem de simplicidade. Meu exemplo é sempre o objeto Date. O que é o objeto Date? Coisa ridícula, perdida, que necessita do Calendar, do SimpleDateFormat para dar funcionalidades mínimas. E o java.sql.Date? Porque existe um primitivo para long e não um para Date?
O negócio do Java é criar um padrão e levar ele até o fim. Se criaram errado, paciência. Por outro lado, a compatibilidade pra trás aproxima as empresas. Tudo isso se aplica fortemente ao substring.
|
visite o blog da Riopro em:
http://blog.riopro.com.br
Aumente a capacidade de inovação na sua empresa usando o Zest:
http://zest.com.br
Conheça também:
http://votebolsa.com.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 16:08:34
|
mister__m
Virtual Machine Man
![[Avatar]](/images/avatar/89b9c689a57b82e59074c6ba09aa394d.jpg)
Membro desde: 18/03/2005 16:13:17
Mensagens: 736
Offline
|
otaviofcs wrote:
fabiocsi wrote:ele mesmo é INCOERENTE.
Fabio, concordo. Só que Java não é feito de coerência nem de simplicidade. Meu exemplo é sempre o objeto Date.
Opa, tae um assunto que eu entendo!
otaviofcs wrote:O que é o objeto Date?
Um número de milissegundos desde 01/01/1970.
otaviofcs wrote:que necessita do Calendar, do SimpleDateFormat para dar funcionalidades mínimas
Calendar deveriiiiiiiia suportar múltiplos sistemas de calendário, como chinês ou coptic. Formatação é normalmente um assunto mais complexo mesmo, aí discordo de você. O toString() de Date deveria ser suficiente.
otaviofcs wrote:E o java.sql.Date?
sql.Date é uma data "humana" com dia, mês e ano somente. Existe porque nada mais no Java representa isso.
otaviofcs wrote:Porque existe um primitivo para long e não um para Date?
Porque não existia no C++ nem o Gosling conseguia ver a necessidade de um primitivo. O que não deveria existir são os tipos primitivos e não o contrário.
otaviofcs wrote:O negócio do Java é criar um padrão e levar ele até o fim. Se criaram errado, paciência.
No caso das datas em si, estamos corrigindo.
|
Michael Nascimento Santos, aka Mister M
Summa Technologies do Brasil - http://www.summa-tech.com/
genesis: Uma nova forma de desenvolver aplicações - https://genesis.dev.java.net/
ThinNB: Suporte a Thinlet no NetBeans - https://thinnb.dev.java.net/
Líder da JSR-310 - Date and Time API
Expert Group Member das JSRs 207 (PD4J), 250 (Common Annotations), 270 (Java 2 SE 6.0), 296 (Swing Framework) e 303 (Bean Validation)
SouJava: Fortalecendo a comunidade Java brasileira - https://soujava.dev.java.net/ https://www.soujava.org.br/
JSR Community @ java.net - http://community.java.net/jsr
Blogs - http://blog.michaelnascimento.com.br/ http://today.java.net/pub/au/80
Twitter - @mr__m |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 16:53:16
|
rodrigoallemand
GUJ Ranger
![[Avatar]](/images/avatar/d7b431b1a0cc5f032399870ff4710743.jpg)
Membro desde: 21/02/2005 20:19:47
Mensagens: 972
Localização: Rio de Janeiro, Recreio!!!
Offline
|
thingol wrote:Eu prefiriria que o substring tivesse 2 argumentos: o índice inicial e a quantidade máxima de caracteres retornados.
Se não me engano, o substr do vb funciona assim, correto?!?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/11/2007 17:30:07
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
rodrigoallemand wrote:
Se não me engano, o substr do vb funciona assim, correto?!?
Acho que Java é o "ponto fora da curva". Nunca vi isso em nenhuma outra linguagem (se bem que não fiquei checando todas :P )
Só de olhar no MSDN dá para ver porque é que um Microsoft-Man tem problemas com o método substring do Java. Mesmo outras linguagens não-Microsoft também são assim.
VB: mid$ - parâmetros: string, posição inicial (começa por 1), quantidade máxima de caracteres (parâmetro opcional; se omitido, vai até o final da string)
FoxPro: SUBSTR - parâmetros: string, posição inicial (começa por 1), quantidade máxima de caracteres (parâmetro opcional; se omitido, vai até o final da string)
Transact-SQL: SUBSTRING - parâmetros: string, posição inicial (começa por 1), quantidade máxima de caracteres (parâmetro opcional; se omitido, vai até o final da string)
C++ (std::string ): substr - parâmetros: posição inicial (começa por 0), quantidade máxima de caracteres
C# (System.String): Substring - parâmetros: posição inicial (começa por 0), quantidade máxima de caracteres (parâmetro opcional; se omitido, vai até o final da string)
Não-Microsoft:
Delphi : Copy - parâmetros: string, posição inicial (começa por 1), quantidade máxima de caracteres
AWK: substr - parâmetros: string, posição inicial (começa por 1), quantidade máxima de caracteres (parâmetro opcional; se omitido, vai até o final da string)
Parece com Java mas não é:
Python: notação de fatias ("slice notation") - você especifica a posição inicial e a final. Exemplo:
s = "Python rulez!";
s [8:12] lhe retorna a palavra "rulez" (começa na posição 8 - as posições começam por 0, e termina na posição 12.)
Ada é quase a mesma coisa que Python, mas a posição inicial é 1 e a sintaxe é usando (..). Exemplo:
s := "Ada rulez";
s (5..9) lhe retorna a palavra "rulez".
|
|
|
 |
|
|