Problemas com o retorno da String

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(' ','#');
}

}

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

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

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.

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(" ","#");

1 curtida

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.

Sim, pode falar!

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(System.in);
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.

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));

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.

manda o codigo completo

import java.text.DateFormat;
import java.text.SimpleDateFormat;
public class Main {

public static void main(String[] args) {
Scanner input = new Scanner(System.in);
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.

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);

É inacreditável, mas deu problema de novo:

exit status 1
Main.java:6: error: cannot find symbol
Scanner input = new Scanner(System.in);
^
symbol: class Scanner
location: class Main
Main.java:6: error: cannot find symbol
Scanner input = new Scanner(System.in);
^
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

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 ");
}

Apresentou esse erro agora na linha nove que é a que destaquei aí, o código tá 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(System.in);
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 ");
}
}

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

1 curtida

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.

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;

1 curtida

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

1 curtida