Lógica

7 respostas
edymrex

Eu presciso pegar de uma String um caracter ou mesmo uma substring em
por exemplo tenho a String “abcdefgh” tenho que pegar substring “abc”
ou o caracter ‘a’ até ai tudo bem atráves do programaninha que eu criei:

public class testes2 
{
     public static void main(String args[])
     {
    	 String w="abcabcabcabc";
    	 String y="abc";
    	 String teste;
    	 int prim=0 ,ult=0;
    	 int cont=0;
    	 
   
	   if(w.indexOf(y)>-1 &&cont==0)
		{
			
			prim=w.indexOf(y);
			ult=(w.indexOf(y) + y.length());
		 
		}
	    
	
	   
   
 		  
          System.out.println(teste=w.substring(prim,ult));
    	 
    	  
     
   }
     
}

eu não estou conseguindo pegar todas as ocorrencias de um determinado caracter em uma string…como eu faço?? neste algortimo tenho certeza que da para implementar mas não estou conseguindo, um exemplo e á própria String que eu coloquei no prog:
String w="“abcabcabcabc”; neste caso tem 4 ocorrências de abc como eu posso resolver isto…? alguém sabe? quero que me mostre quantas ocorrências tem e me retorne as substrings ou caracteres…

7 Respostas

Roger75

Você tem que fazer um código assim:

String str="abcabcabc"; String part="abc"; int count=0; String strCompare=null; for(int i=0;i<str.length();i++){ strCompare=str.substring(i,i+part.length()); System.out.println(strCompare); if (strCompare.equals(part)){ count++; } } System.out.println("Count="+count);

No “for” eu pego cada parte a partir do index i e vou até o comprimento da parte a ser verificada. Não testei o código mas acho que é por aí.>

edymrex

Tentei usar seu cógido mas está com erro tb tentei trabalhar nele mas não deu…

Roger75

Bem, como disse, não testei o código, mas veja que a lógica do que você deseja fazer é essa mesmo… varrer a string e procurar pela ocorrência da palavra nela.

Ismaels

Oi, porque você não tenta uma abordagem usando regex, com Pattern e Matcher? Acho que seria bem mais fácil encontrar todas as ocorrências.
Se precisar de ajuda avise aqui 8)

T

Não seria melhor nessa caso usar o StringBuffer?

Talves o método abaixo possa ajudar…

indexOf(String str, int fromIndex) - Returns the index within this string of the first occurrence of the specified substring, starting at the specified index.

No caso vc poderia pegar a primeira ocorrência da substring que vc quer. Como vc sabe o tamanho dela vc pode fazer a procura novamente a partir do indice após o indice da substring anterior.

ViniGodoy

Seguindo a dica do smaels, o código abaixo usa pattern matching para achar todas as ocorrência de abc dentro do texto dado:

public class MatcherDemo
{
    public static void main(String[] args)
    {
        String w = "abcabcabcabc";
        String y = "abc";

        int prim = 0, ult = 0, cont = 0;

        Pattern p = Pattern.compile(y);
        Matcher m = p.matcher(w);

        while (m.find()) {
            cont++;
            prim = m.start();
            ult = m.end();
            System.out.printf("Encontrado em %d até %d = %s\n", prim, ult-1,
                    w.substring(prim, ult));
        }
        System.out.printf("Encontradas %d ocorrências de '%s' em '%s'", cont, y, w);
    }
}

O código fica bem limpo, especialmente porque o matcher já retorna o último índice, evitando o cálculo de índice+tamanho. Aqui deixei as variáveis prim e ult para ficar mais didático, mas o código não ficaria muito mais confuso de fizéssemos o inline delas.

Só um detalhe. O método end() retorna o último índice encontrado+1. Isso é bastante conveniente já que o substring considera o indice inicial inclusivo e o final exclusivo.

A

Outra opção é usar essa versão do indexof:

indexOf(String str, int fromIndex) Returns the index within this string of the first occurrence of the specified substring, starting at the specified index.

Abs

Criado 16 de junho de 2007
Ultima resposta 18 de jun. de 2007
Respostas 7
Participantes 6