Entrada de dados em .txt - parar de solicitar a entrada quando for inserida uma linha em branco

Boa noite!

Todo grande desafio começa com o primeiro passo, o meu vem com uma pergunta junto :slight_smile:
Pessoal, eu estou com uma dúvida. Vou postar o código abaixo que funciona assim: eu digito linhas, pressiono Enter, e quando eu paro a execução é gerado um arquivo texto com o conteúdo. Meu problema está em, ao invés de parar a execução, eu gostaria que uma linha em branco (ou enter duas vezes) encerrasse a execução e gerasse o arquivo com o conteúdo digitado. Segue:

package teste;

	import java.io.*;

	public class EntradaTexto{ 
		public static void main(String[] args) {
			digitarTeclado();
		}
		
		public static void digitarTeclado(){	
		String destino="";
		destino="C:\\temp\\log.txt";
		String linha = "";
		String teste = "";
		
		
		InputStreamReader isr = new InputStreamReader(System.in);
		BufferedReader in = new BufferedReader(isr);
		System.out.println("Digite algo no console e tecle enter");
		try{
			FileWriter o = new FileWriter(destino);
			PrintWriter out = new PrintWriter(o);
			while ((linha = in.readLine())!=null){
				System.out.println(linha);
				        //tentativa de sair #fail
                                        if (linha==""){
					System.out.println("Sai do loop!");
                                        break;
				}
				out.println(linha);
				}
			out.flush();	
			o.close();
		}catch(Exception e){
			e.getMessage();
		}
		
	}
}

Como eu posso solucionar este problema? Tentei utilizar um if com break e nada…
Ah se tiverem algo a comentar como eu poderia ter feito melhor, eu ficarei imensamente grato! Sou novo no mundo Java, e estou gostando muito dessa linguagem! E crítica é sempre bom!

Obrigado pela ajuda!

Tente alterar o if para:

if(linha.equals("")){

ao inves de:

if(linha==""){

para comparação de string sempre utilize o método equals.

No java não da pra comprar string usando o == …tem que usar o equals…

Mas debuga seu programa…e ve quando você da enter o que vem na string? vem string vazia ("") ou string com espaço (" “) ou quebra de linha (”\n")?

depois de descobrir o que vem na string quando você aperta enter…ai é só colocar isso no seu if comparando com equals ao invés de == que vc consegue alterar o fluxo quando apertar enter…certo?

[]'s

Paulohms, Bastides, obrigado pela ajuda e pela explicação!

Quanto a solução eu utilizei o “” mesmo:

if(linha.equals("")){  

Sendo assim o programa ficou correto, é só eu não digitar nada e apertar o Enter que o programa foi finalizado e gerou o .txt com os dados digitados.

Muito obrigado!

Att.

Bruno.

Então o erro era só o == ao invés do equals…achei que podia estar vindo algo diferente de “” na string quando apertava enter.

[]'s

Melhor inda seria colocar:

if (linha.isEmpty())

Legal esse comando ViniGodoy, eu não conhecia essa maneira, mas tá anotado pra utilizar. Obrigado!

[quote=paulohms]Tente alterar o if para:

if(linha.equals("")){

ao inves de:

if(linha==""){

para comparação de string sempre utilize o método equals.[/quote]

ficou uma duvida minha agora. sobre o equals

como seriam feitas as comparações dentro de um if exemplo. Este abaixo. q fiz.

int s, maior;

	[code]
	System.out.println("Digite o primeiro valor");
	int v1 = sc.nextInt();
	
	
	System.out.println("Digite o segundo valor");
	int v2 = sc.nextInt();
	
	
	System.out.println("Digite o terceiro valor");
	int v3 = sc.nextInt();

	if(v2 > v3){
      System.out.equals(maior == v2);
	}
	else{
		System.out.equals(maior == v3);
	}
	s = (v1 + maior) /2;
	
	if (s >= 6){
		System.out.println("Aluno aprovado");

[/code]

ou melhor método para isto seria usando Switch,

Olá cadobry!

Segundo o que eu entendi o equals é utilizado para comparar apenas string. Por exemplo:

if (nome.equals("Bruno")); ...
No seu caso você está usando números, então a comparação fica assim:

if(v2 > v3){ //a comparação acontece aqui, se o v2 (segunda nota digitada) for maior que v3(terceira nota digitada) então faça:  
     maior = v2;  //nota maior será igual à v2
}  
else{  //se a comparação acima for falsa (nota 3 maior que nota 2)
    maior = v3; 
}

Se quiser utilizar a comparação se a nota v2 for igual à v3, utilize:

if(v2==v3){
...
}

Era esta sua dúvida?

Valeu!

[quote=bgomes06]Olá cadobry!

Segundo o que eu entendi o equals é utilizado para comparar apenas string. Por exemplo:

if (nome.equals("Bruno")); ...
No seu caso você está usando números, então a comparação fica assim:

if(v2 > v3){ //a comparação acontece aqui, se o v2 (segunda nota digitada) for maior que v3(terceira nota digitada) então faça:  
     maior = v2;  //nota maior será igual à v2
}  
else{  //se a comparação acima for falsa (nota 3 maior que nota 2)
    maior = v3; 
}

Se quiser utilizar a comparação se a nota v2 for igual à v3, utilize:

if(v2==v3){
...
}

Era esta sua dúvida?

Valeu![/quote]

bgomes vlw

exato. era sim. porem a duvida era eu achava que ele tbm poderia ser comparado com equals. que eu ja tinha testado desta forma que vc mencionou agora entendi q o equals so faz comparaçoes de strings. entre si.

te + Obrigado.

O equals é um método que serve para comparar um objeto é igual ao outro. A definição de igualdade depende do tipo do objeto.

Em objetos do tipo String, igualdade é se todos os caracteres de uma string são os mesmos da outra, na mesma ordem: http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#equals(java.lang.Object)

Também em String há também o equalsIgnoreCase, que compara duas Strings ignorando diferenças de maiúsculas e minúsculas: http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#equalsIgnoreCase(java.lang.String)

Para comparações propriamente ditas, ordernar uma String em relação à outra, há o compareTo e o compareToIgnoreCase.

As classes wrappers de números e outros tipos primitivos do Java também tem estes mesmos métodos que citei, e milhares de outros. Veja sempre o JavaDoc de toda classe Java com que for trabalhar para aprender a usar a linguagem inteira.