Problemas com o retorno da String

19 respostas Resolvido
programaçãojava
V

Estou tendo problema com duas questões, já mexi muito nelas e não consegui consertar o problema. Gostaria de saber o que estou fazendo errado:

Essa primeira abaixo deveria me retornar o número de palavras que a frase contém. No caso o exemplo que inseri deveria me retornar três, mas retorna 16. Direto sei que daria, mas preciso fazer usando função, mas ainda tenho dificuldade.

import java.util.Scanner;

public class Main{

public static void main(String[] args) {

String frase = Amanhã é domingo;

System.out.println(numPalavras(frase));

}

public static int numPalavras(String frase) {

String[] palavras = frase.split(" ");
return frase.length();
}

}

Essa segunda deveria receber uma frase e substituir todos os espaços entre as palavras por “#”. A frase tem que ser inserida pelo usuário. Ex: Amanhã é domingo.
Saída: Amanhã#é#domingo.

import java.util.Scanner;
public class Main {

public static void main(String[] args) {

	Scanner input = new Scanner(System.in);
	System.out.println("Informe um nome: ");
	String frase = input.nextLine();
	String numPalavras = numPalavras(frase); 
	System.out.println(numPalavras(frase));
}
public static String numPalavras(String frase) {
	String[] palavras = frase.split(" ");
	
	return frase.replaceAlll(' ','#');
}

}

19 Respostas

M

Não entendi muito bem o problema mas vou tentar ajudar.
Na primeiro você deveria fazer:
String[] palavras = frase.split(" ");
return palavras.length();

Na segunda nao entendi o problema

V
Ainda não roda, agora deu isso:

exit status 1

Main.java:11: error: cannot find symbol

return palavras.length();

^

symbol:   method length()

location: variable palavras of type String[]

1 error
V

E a segunda é para mim fazer isso: Faça uma função que recebe uma frase e substitui todas as ocorrências de espaço por“#”. Faça também uma função para realizar a entrada de dados. A saída de dados deve
ser feita no programa principal.

M
Solucao aceita

Errei no return palavras.length();, na verdade é return palavras.length;

Quanto ao segundo codigo o unico erro que vejo é: return frase.replaceAlll(' ','#'); que deve ser substituido por return frase.replaceAll(" ","#");

V

Puxa cara, valeu mesmo!! Resolveu os dois. Você poderia me ajudar com um problema que to tendo com data também? Se não for incômodo.

M

Sim, pode falar!

V
Assim, o programa pede pro usuário inserir uma data no formato dd/mm/aaaa e o programa imprimir ela com o mês por extenso tipo:

entrada: 14/08/2018

Saída 14 de agosto de 2018.

Eu tentei fazer assim depois de pesquisar:

import java.text.DateFormat;

import java.text.SimpleDateFormat;

public class Main {
public static void main(String[] args) {

Scanner input = new Scanner(<a href="http://System.in">System.in</a>);

System.out.printfln(Informe sua data de nascimento:\n);

String dataRecebida = input.nextLine();

System.out.println("Você nasceu em "+ data);

}
public static String getDataPorExtenso(dataRecebida){

DateFormat dfmt = new SimpleDateFormat(EEEE, d de MMMM de yyyy);

return dfmt.format(data);

}

}

Mas não tá dando certo.

M

Primeiro, você dá alguns erros de sintaxe, como por exemplo troca o nome das variaveis:

String dataRecebida = input.nextLine();
System.out.println("Você nasceu em "+ data);

Supostamente voce queria usar dataRecebida. Se conseguir instalar uma IDE como eclipse talvez o ajudasse… Para alem disso nao usou o metodo getDataPorExtenso(String dataRecebida).

static String getDataPorExtenso(String dataRecebida) {
	Format formatter = new SimpleDateFormat("dd MMMM yyyy");
	String dataFormatada = formatter.format(new Date());
	return dataFormatada.replaceAll(" ", " de ");
}

Penso que não tenha forma de usar o “de” no formatador, então decidi separar por espaços e depois substitui-los pelo “de”. Depois disto para funcionar basta invocar o metodo, substituindo o
System.out.println("Você nasceu em "+ data);
por
System.out.println("Você nasceu em " + getDataPorExtenso(dataRecebida));

V

Essa linha tá dando erro, quando compilo aparece isso: exit status 1
Main.java:9: error: ‘;’ expected
String getDataPorExtenso = String getDataPorExtenso(dataRecebida);
^
1 error
Não sei porque. E eu concordo com você, é que meu pc não suporta, mas consegui comprar um bom note, to só esperando chegar para instalar o eclipse.

M

manda o codigo completo

V
import java.text.DateFormat;

import java.text.SimpleDateFormat;

public class Main {
public static void main(String[] args) {

Scanner input = new Scanner(<a href="http://System.in">System.in</a>);

System.out.println(Informe sua data de nascimento:\n);

String dataRecebida = input.nextLine();

String getDataPorExtenso = String getDataPorExtenso(dataRecebida);

System.out.println("Você nasceu em " + getDataPorExtenso(dataRecebida));

}
static String getDataPorExtenso(String dataRecebida) {

Format formatter = new SimpleDateFormat(dd MMMM yyyy);

String dataFormatada = formatter.format(new Date());

return dataFormatada.replaceAll(" ", " de ");

}

}

Aqui.

M

O erro está aqui: String getDataPorExtenso = String getDataPorExtenso(dataRecebida);
Não precisa dizer que é uma String após o sinal de =, basta no inicio. Sendo assim fica:
String getDataPorExtenso = getDataPorExtenso(dataRecebida);

V

É inacreditável, mas deu problema de novo:

exit status 1

Main.java:6: error: cannot find symbol

Scanner input = new Scanner(<a href="http://System.in">System.in</a>);

^

symbol:   class Scanner

location: class Main

Main.java:6: error: cannot find symbol

Scanner input = new Scanner(<a href="http://System.in">System.in</a>);

^

symbol:   class Scanner

location: class Main

Main.java:14: error: cannot find symbol

Format formatter = new SimpleDateFormat(dd MMMM yyyy);

^

symbol:   class Format

location: class Main

Main.java:15: error: cannot find symbol

String dataFormatada = formatter.format(new Date());

^

symbol:   class Date

location: class Main

4 errors
M

Esse problema parece ser devido a não ter importado a classe scanner. Para importar use import java.util.Scanner;.
De qualquer forma o codigo tinha um pequeno erro, o metodo getDataPorExtenso correto é:

static String getDataPorExtenso(String dataRecebida) {
	SimpleDateFormat formatter = new SimpleDateFormat("dd MMMM yyyy");
	try {
		dataRecebida = formatter.format(new SimpleDateFormat("dd/MM/yyyy").parse(dataRecebida));
	} catch (ParseException e) {
		e.printStackTrace();
	}
	return dataRecebida.replaceAll(" ", " de ");
}
V
Apresentou esse erro agora na linha nove que é a que destaquei , o código  assim.

import java.util.Scanner;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

public class Main {
public static void main(String[] args) {

Scanner input = new Scanner(<a href="http://System.in">System.in</a>);

System.out.println(Informe sua data de nascimento:\n);

String dataRecebida = input.nextLine();

String getDataPorExtenso = getDataPorExtenso(dataRecebida);

System.out.println("Você nasceu em " + getDataPorExtenso(dataRecebida));

}
static String getDataPorExtenso(String dataRecebida) {

SimpleDateFormat formatter = new SimpleDateFormat(dd MMMM yyyy);

try {

dataRecebida = formatter.format(new SimpleDateFormat(dd/MM/yyyy).parse(dataRecebida));

} catch (ParseException e) {

e.printStackTrace();

}

return dataRecebida.replaceAll(" ", " de ");

}

}
M

Tem que importar ParseException: import java.text.ParseException;

V

Deu certo! Obrigado. Só queria saber mais uma coisa, como eu faço para o mês imprimir em português? Tenho que usar outro import? Tá imprimindo em inglês.

M

O meu já está em portugues, no entanto tenta isso:
SimpleDateFormat formatter = new SimpleDateFormat("dd MMMM yyyy", new Locale("pt", "PT"));
e importa isso: import java.util.Locale;

V

Agora foi. Tudo certo! Muito obrigado pela ajuda e pela paciência em me explicar tudo. Tenha um bom domingo! o/

Criado 15 de setembro de 2018
Ultima resposta 16 de set. de 2018
Respostas 19
Participantes 2