Problemas com edição de Strings

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?

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

Falow

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

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

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

Então o problema é no substring…

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.

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

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

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

Tentei aqui, mas não saiu nada…

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

Tentei aqui, mas não saiu nada…[/quote]



    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

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

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.

pq o valor n existe?explica denovo

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

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+