Não deixar adicionar Strings nulas em um array

6 respostas
S

Olá pessoal...
Estou com um pequeno problema, funciona dessa maneira: tenho um título, e uma array com várias palavras a serem ignoradas.
Utilizo split(" ") para separar cada palavra do titulo, para que cada uma seja comparada uma vez com cada palavra a ser ignorada, se essa determinada palavra não for igual a nenhuma das palavras ignoradas, então essa palavra é uma keyword... tenho q armazenar as keywords do titulo em um vetor, consigo adicioná-las mas ocorre um problema na hora de mostrar a saida, as posições do array que não são palavras chave, são inseridas como "null", como o problema pede para utilizar um Array, não posso faze-lo com Vector, ArrayList, nada que faça isso por mim e oque eu teria que mostrar são apenas as keywords, dessa maneira:
Sergio
Java

Segue o código:

public class KeyWords {
   
   public static void main(String[] args) {
        
        String titulo = "Sergio e o Java";
        String [] ignpalavras={"a","e","de","da","do","das","dos","as","os","o"};
        String [] palavra = titulo.split(" ");
        int count = 0;
        String [] keyword = new String [palavra.length];
             
            for (int i=0 ;i < palavra.length ;i++ )  {
                for (int j = 0 ;j < ignpalavras.length;j++ )  {
                    if (!palavra[i].equals(ignpalavras[j]))  {
                        count++;        
                    }
                     
                 }
                     if (count==ignpalavras.length)  {
                                      
                        keyword [i] = palavra[i];
                         
                         
                     }
                     count = 0;
                  }  
                                        
                   for (int i =0; i< keyword.length;i++){
                       System.out.println(keyword[i]);
                   }
                    
            }
 }
Espero as dicas de todos! Obrigado.

6 Respostas

T

no ultimo loop onde vc exibe as palavras chaves poderia colocar um if que verifique se a palavra é nula ou nao

for (int i =0; i< keyword.length;i++){  
           if (keyword[i] != null){
             System.out.println(keyword[i]);  
            } 
      }
celso.martins

Cara, não sei se tem uma forma mais elegante de implementar. Mas como você não pode usar uma Collection da vida e em Java não existe o conceito de array dinâmico, o que eu consegui arrumar para você foi isso, com dois loops praticamente idênticos: Um para contar as palavras válidas (para o tamanho do array) e outro para capturar essas palavras.

public class ContaKeywords {

	public static void main(String[] args) {

		String titulo = "Sergio e o Java";  
		String palavrasIgnoradas = "a,e,de,da,do,das,dos,as,os,o";  
		String [] arrayDePalavras = titulo.split(" ");  
		
		int contador = 0;
		for (String palavra: arrayDePalavras){
			if (!palavrasIgnoradas.toLowerCase().contains(palavra.toLowerCase())){
				contador++;
			}
		}
		
		String[] arrayDeKeywords = new String[contador];
		
		contador = 0;
		for (String palavra: arrayDePalavras){
			if (!palavrasIgnoradas.toLowerCase().contains(palavra.toLowerCase())){
				arrayDeKeywords[contador] = palavra;
				contador++;
			}
		}
		
        for (String keyword: arrayDeKeywords){
        	System.out.println(keyword);  
        }  
	}  
}

Espero que sirva. Observe os nomes das variáveis e a substituição do Array de palavras ignoradas por uma String separada por vírgulas, o que permitiu o uso de contains.

Abraços.

S
Nossa Celso, ficou bem melhor do que o código que eu tinha idealizado, não conhecia esse método contains, bem interessante

Agora eu vou pra segunda parte do código, que é armazenar as keywords em um vetor bidimensional junto a seu título

Por exemplo:

Título - Sergio e o Java;

Keywords - Sergio, Java;

Saída:

Sergio - SERGIO e o Java;
Java - Sergio e o JAVA;

A sáida deverá mostrar a keyword e na frente o título a que ela pertence com a keyword em maiúscula.
Vou tentar implementar esse código.

Muito obrigado Celso e Thiago, qualquer dúvida voltarei a postar.
Abraços.

S

Olá pessoal to de volta, com uma outra dúvida... :?
Depois da ajuda de muitos de vocês consegui montar o código, ta meio carregado mas está funcionando, se vocês rodarem poderão ver como está sendo a sáida.

Keywords - Sergio, Java;
Título - Sergio e o Java;

A sáida está da maneira que deve ser: keyword - título

Então que surge o problema, eu tenho q fazer a keyword aparecer em maiúscula no título, dessa maneira:
Sergio - SERGIO e o Java;
Java - Sergio e o JAVA;

Já bati a cabeça aqui, eu sei que tenho que comparar a keyword com cada palavra do título até encontrar a palavra igual, mas não encontrei uma maneira de alterar somente uma palavra do título. Segue o código:
public class KeyWords {
   
   public static void main(String[] args) {
        
        String titulo = "Sergio e o Java";
        String [] ignpalavras={"a","e","de","da","do","das","dos","as","os","o","ou"};
        String [] palavra = titulo.split(" ");
        int count = 0;
        String [] aux_keyword = new String [palavra.length];
        int countk = 0;
        
        for (int i=0 ;i < palavra.length ;i++ )  {
                for (int j = 0 ;j < ignpalavras.length;j++ )  {
                    if (!palavra[i].equals(ignpalavras[j]))  {
                        count++;        
                    }
                }
                    if (count==ignpalavras.length)  {
                        countk++;
                        aux_keyword [i] = palavra[i];
                    }     
                     count = 0;     
             }        
                 int j = 0;
                    String [] keyword = new String[countk];
                    for(int i = 0; i < aux_keyword.length;i++){
                        if (aux_keyword[i] != null){ 
                            keyword[j] = aux_keyword[i];
                            j++;
                        }
                    }   
                  String [][] kwic = new String [keyword.length][2];
                    
                   for(int i = 0; i <keyword.length; i++){
                        for(int k = 0; k < 1; k++){
                            kwic[i][k] = keyword[i];
                            kwic[i][k+1] = titulo;
                        }
                    }
                    for (int i =0; i < keyword.length;i++){
                       for(int k = 0; k < 1; k++){
                           System.out.println(kwic[i][k]+ " " +" "+ kwic[i][k+1]);
                           
                       }
                   }
              }     
        }

Espero a ajuda de todos, continuarei pensando aqui.
Obrigado desde já.

celso.martins

Cara, se vc quebrou a cabeça e não conseguiu achar isso, vc precisa do caminho das pedras.

Tirando os tipos primitivos, tudo em Java é resolvido por classes. Se não esqueci alguma outra coisa.

Esse é o caso da classe String. Normalmente uma consulta na api tira muitas dúvidas.

Para o seu caso específico, veja aqui

No google, colocando java String vem uma penca de sites relacionados.

A solução para o seu problema atual pode ter uma linha.

String key = "Sergio";
		String palavra = "Sergio e o Java";
		System.out.println(palavra.replaceAll(key, key.toUpperCase()));

Abraços.

S

Nossa Celso, mais uma vez muito obrigado…
O java é interessante demais nesse aspecto, quase sempre, ou sempre existem métodos que podem fazer o trabalho “braçal” por nós, tenho que consultar mais as api’s do Java como você disse.
Muito obrigado pelas dicas, aparecendo mais alguma dúvida, antes pesquisarei, mas caso não consiga, recorro ao GUJ. :smiley:
Obrigado por tudo!
Abraços.

Criado 3 de outubro de 2008
Ultima resposta 4 de out. de 2008
Respostas 6
Participantes 3