Problemas com edição de Strings

14 respostas
hcbelias

Tenho que fazer uma formatação em uma string do tipo: “abc123”

a saida deve ser:
“abc<|>123”
ou seja , quando não houver “href” dentro da tag, deve-se substituir o que houvber dentro da tag por " | "

Eu fiz um programa da seguinte forma::

package teste2;

public class Main
{

public Main ()
{
}


public static void main (String[] args)
{
    String str="cvxcv<abchref>cvxcv";
    Boolean href=false;
    int abre=str.indexOf ("<"),ind, fecha=str.indexOf (">"),
            ultimoFecha=str.lastIndexOf (">"),ultimoAbre=str.lastIndexOf ("<");
    String saida="";
    ind=abre;
    
    System.out.printf("%d",str.length ());
    while (ind<=ultimoFecha)
    {
        String aux="";
        if(str.length ()>fecha)
        {
            aux=aux.concat(str.substring(abre,fecha+1));
        }
        else
        {
            aux=aux.concat (str.substring (abre));
        }
        
        
        StringBuffer strbuffer=new StringBuffer (aux);
        
        
        for(int i=abre;i<fecha-3;i++)//verifica se entre as chaves há href
        {
            if (aux.regionMatches (true,i,"href",0,4))
            {
                href=true;
                
            }
        }
        if (href)//Caso haja href
        {
            saida=saida.concat (aux);
            
        }
        else//Caso não haja href
        {
            saida=saida.concat (strbuffer.replace (abre+1,fecha,"|").toString ());
        }
        abre=str.indexOf ("<",abre+1);
        fecha=str.indexOf (">",fecha+1);
        ind=fecha;
        href=false;
        
        
    }
    
    
    
    
    System.out.print (saida);
    
    
    
    
    
}

}


O problema que dá " String Out Of Range:-1" , na linha 30, alguém pode me ajudar?

14 Respostas

analyser

Cara não entendi que tipo de formatação vc quer fazer, explica melhor

Falow

aleck

Verifique as linhas:

abre=str.indexOf ("<",abre+1);
fecha=str.indexOf (">",fecha+1);

Nestas linhas você está buscando na String inicial “str” pelo caracter “<” após a posição 6(abre+1), isso dá um indice negativo pois você está buscando este caracter após o mesmo já ter aparecido.

Ps: Nomeie suas variaveis de uma maneira que fique claro seu uso.

[]'s

hcbelias

O problema e que o netbeans aponta o erro em ; aux=aux.concat(str.substring(abre,fecha+1));

diego2005

hcbelias:
O problema e que o netbeans aponta o erro em ; aux=aux.concat(str.substring(abre,fecha+1));

Então o problema é no substring…

hcbelias

Eu preciso de um programa que faz o seguinte;
Entrada : uma string qualquer
Objetivo formatacao da string da seguinte forma/:::
Caso a String contenha uma tag ( “<…>”, um par de menor e maior), se dentro da tag houver a substring “href”, não faça formatação alguma. Se dentro da tag não houver a substring “href”, deve-se substituir a substring que há dentro das tags por " | " (barra reta" …
To precisando deste programa urgentemente, se alguém puder verificar o meu programa, ou consegue programar um, agradeco.

hcbelias

mas eu ja usei o debug, o valor de abre e igual a 5, e o de fecha igual a 13, eu não vejo erro nestes dados

_Renatu

Dá uma estudada em Expressoes Regulares (regex), resolve seu problema fácil fácil.

diego2005

Alguém arrisca uma er pra esse caso???

Tentei aqui, mas não saiu nada…

aleck

Alguém arrisca uma er pra esse caso???

Tentei aqui, mas não saiu nada…

private void substituirValores() {

        Pattern pattern = Pattern.compile("&lt[/a-zA-Z]+[^href]&gt");
        Matcher matcher = pattern
                .matcher("abc<quandonaotem>123<quandotemhref><oqueeuestoufazendoaqui>");
        System.out.println(matcher.replaceAll("&lt|&gt"));

    }

[]'s

hcbelias

quero saber o que esta errado nesta linha
aux=aux.concat(str.substring(abre,fecha+1));

aleck

Nesta linha não tem nada de errado, vc apenas cria uma nova String com os valores de outra String.

O problema, como eu tinha dito anteriormente é que vc está querendo acessar um valor que não existe.

hcbelias

pq o valor n existe?explica denovo

hcbelias

ja fiz varios testes, o problema esta na linha ke eu mencionei, manda executa o programa p ver oque acontece

diego2005

Uai, o índice que você está passando para o método substring pode está fora…

Por exemplo:

String s = "Java"; s.substring(1, 5); // vai dar erro, 5 está fora

T+

Criado 18 de julho de 2007
Ultima resposta 18 de jul. de 2007
Respostas 14
Participantes 5