Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Poligno

Comando split().

Recommended Posts

Olá galera,gostaria de saber como implementar corretamente o comando split,que pelo o que eu entendi ele quebra uma string até o lugar definido.Tentei usar esse comando para isso mas acho que estou fazendo algo errado,segue o meu código:

 

package javaapplication1;

import java.util.Scanner;

public class JavaApplication1 {

 

public static void main(String[] args) {

Scanner scan = new Scanner(System.in);
//int cont=0;

System.out.println("Digite uma frase:");
//String nome = scan.nextLine();
String nome = ("Digite uma frase:");

String array[] = new String[10];
array = nome.split(" ");
System.out.println(array);
}

 

o resultado foi esse: http://prntscr.com/aby1kk

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é a forma que está tentando imprimir o conteúdo do array. Use:

String nome = ("Digite uma frase:");
    
String array[] = nome.split(" ");
System.out.println(Arrays.toString(array));

ou:

String nome = ("Digite uma frase:");
    
String array[] = nome.split(" ");
for(String each : array)
   System.out.println(each);

ou:

String nome = ("Digite uma frase:");
    
String array[] = nome.split(" ");
for(int i = 0; i < array.length; i++)
   System.out.println(array[i]);

Compartilhar este post


Link para o post
Compartilhar em outros sites

A dúvida principal foi respondida,mas me surgiu outra em relação ao comando .split, então vou reaproveitar o tópico. Tenho que fazer um algoritmo que diga quantas palavras repetidas estão na em uma frase,porém se eu usar como padrão de separação de palavras '.split(" ")' (espaço) e inputar a seguinte frase "ñ sei se vamos nem sabemos onde vamos" ele irá reconhecer,no código a baixo,que 'vamos' está repetida,porém se eu inputar "ñ sei se vamos, nem sabemos onde vamos" ele ñ 'reconhece' um dos 'vamos' já que um deles na verdade é "vamos," .A dúvida é: como resolver isso,há alguma forma de passar para o .split mais de um caractere para usar como ponto de separação de palavras?


import java.util.Scanner;

public class JavaApplication1 {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        //int cont=0;

        System.out.println("Digite uma frase:");
        String frase = scan.nextLine();

        System.out.println("Digite um nome:");
        String nome = scan.nextLine();

        palindromo(nome);

        CharBranco(frase);
        System.out.println("O numero de espaços em branco é:" + CharBranco(frase));

        palavras_iguais(frase);

        concat(frase);

    }

    public static void palavras_iguais(String args) {

        String array[] = args.split(" "); //separa as palavras da string usando space como demarcador
        int cont = 0;
        int k;

        for (int i = 0; i < array.length; i++) {
            String aux = array[i]; //guarda a iº palavra da string

            for (k = i + 1; k < array.length; k++) {
                String aux3 = array[k]; //guarda as próximas palavra da string
                if (aux.equals(aux3)) {
                    cont++;
                }
            }
        }

        System.out.println("há " + cont + " palavras iguais na frase");

    
}

Grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segundo a documentação do método split, ele aceita expressões regulares. Então ao invés de splittar por caractere em branco, use \W que significa qualquer caractere que não seja uma letra ou número ou um underline.

import java.util.Arrays;
import java.util.HashSet;

public class Main {
    public static void main(String...args){
        String frase = "ñ sei se vamos nem sabemos onde vamos";
        System.out.println("Palavras iguais: " + palavrasIguais(frase));
    }
    
    public static int palavrasIguais(String args){
        String palavras[] = args.split("\\W+");
        return palavras.length - new HashSet<>(Arrays.asList(palavras)).size();
    }
}

OBS: Isso vai dar diferença de "vamos" para "Vamos"... uma solução é tornar todas as letras minúsculas antes de chamar o split:

String palavras[] = args.toLowerCase().split("\\W+");

Explicando o que fiz:

  • Primeiro criei um array com todas as palavras;
  • Usei um objeto que implementa a interface "Set" que aceita somente valores únicos. Ou seja, qualquer valor duplicado é descartado. Assim teríamos um conjunto de palavras sem repetições.
  • Subtrai o total de elementos no array "palavras" (contendo as repetidas) pelo tamanho do conjunto sem conter repetições.

 

O mesmo método passo-a-passo:

import java.util.Arrays;
import java.util.HashSet;

public class Main {
    public static void main(String...args){
        String frase = "ñ sei se vamos nem sabemos onde vamos";
        System.out.println("Palavras iguais: " + palavrasIguais(frase));
    }
    
    public static int palavrasIguais(String args){
        String palavras[] = args.split("\\W+");
        
        HashSet<String> set = new HashSet<>();
        set.addAll(Arrays.asList(palavras)); // adiciona todas as palavras e descarta o que já estiver no 'set'.
        
        int palavrasRepetidas = palavras.length - set.size(); 
        return palavrasRepetidas;
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brow,acho que ñ entendi...eu alterei no meu código a linha do split,trocando " " por "\\w" só que continua dando erro,sendo que agora ele conta mais palavras repetidas do que já tem,bem mais.

 

PS:alguns comandos do teu código eu desconheço,é algum deles que está faltando no meu código?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.