Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
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!
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:
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;
}
}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?
\\W+ não \\W.
O problema é a forma que está tentando imprimir o conteúdo do array. Use:
ou:
ou: