[RESOLVIDO]Usando delimitador

5 respostas
I

Galera eu digito minha STRING 'primeiroDia' dessa maneira "Dia 5". Eu quero pegar tudo que vem depois do ESPAÇO, como faço isso?

import java.util.Scanner;
import java.util.Locale;

public class Main{

	public static void main(String[] args){
	
		Locale.setDefault(Locale.US);
		Scanner entradaTeclado = new Scanner(System.in);
		String primeiroDia = entradaTeclado.nextLine();
		String horaDia1 = entradaTeclado.nextLine();
		int diaInicio = Integer.parseInt(primeiroDia);
		char h1 = horaDia1.charAt(0);
		char h12 = horaDia1.charAt(1);
		String pegaHora = Character.toString(h1) + Character.toString(h12);
		int horaInicial = Integer.parseInt(pegaHora);
		char m1 = horaDia1.charAt(5);
		char m12 = horaDia1.charAt(6);
		String pegaMinuto = Character.toString(m1) + Character.toString(m12);
		int minutoInicial = Integer.parseInt(pegaMinuto);
		char s1 = horaDia1.charAt(10);
		char s12 = horaDia1.charAt(11);
		String pegaSegundo = Character.toString(s1) + Character.toString(s12);
		int segundoInicial = Integer.parseInt(pegaSegundo);
		
		String segundoDia = entradaTeclado.nextLine();
		String horaDia2 = entradaTeclado.nextLine();
		int diaFinal = Integer.parseInt(segundoDia);
		h1 = horaDia2.charAt(0);
		h12 = horaDia2.charAt(1);
		pegaHora = Character.toString(h1) + Character.toString(h12);
		int horaFinal = Integer.parseInt(pegaHora);
		m1 = horaDia2.charAt(5);
		m12 = horaDia2.charAt(6);
		pegaMinuto = Character.toString(m1) + Character.toString(m12);
		int minutoFinal = Integer.parseInt(pegaMinuto);
		s1 = horaDia2.charAt(10);
		s12 = horaDia2.charAt(11);
		pegaSegundo = Character.toString(s1) + Character.toString(s12);
		int segundoFinal = Integer.parseInt(pegaSegundo);
		
		int resultDia = 0;
		int resultHora = 0;
		int resultMinuto = 0;
		int resultSegundo = 0;

		if(diaInicio == diaFinal){
			if(segundoFinal < segundoInicial){
				minutoFinal--;
				segundoFinal += 60;
				if(minutoFinal < minutoInicial){
					horaFinal--;
					minutoFinal += 60;
				}
				resultHora = horaFinal - horaInicial;
				resultMinuto = minutoFinal - minutoInicial;
				resultSegundo = segundoFinal - segundoInicial;
			}else{
				if(minutoFinal < minutoInicial){
					horaFinal--;
					minutoFinal += 60;
				}
				resultHora = horaFinal - horaInicial;
				resultMinuto = minutoFinal - minutoInicial;
				resultSegundo = segundoFinal - segundoInicial;
			}
		}else{
			if(horaInicial > horaFinal){
				diaFinal--;
				resultDia = diaFinal - diaInicio;
				resultHora = (24 + horaFinal - horaInicial);
				resultMinuto = Math.abs(minutoInicial - minutoFinal);
				resultSegundo = Math.abs(segundoInicial - segundoFinal);
			}else{
				resultDia = diaFinal - diaInicio;
				resultHora = Math.abs(horaInicial - horaFinal); 
				resultMinuto = Math.abs(minutoInicial - minutoFinal); 
				resultSegundo = Math.abs(segundoInicial - segundoFinal); 
			}
		}
		
		System.out.printf("%d dia(s)\n", resultDia);
		System.out.printf("%d hora(s)\n", resultHora);
		System.out.printf("%d minuto(s)\n", resultMinuto);
		System.out.printf("%d segundo(s)\n", resultSegundo);
	
	}

}

o exercicios que eu estou resolvendo e este aki: http://www.urionlinejudge.com.br/judge/problems/view/1061
a unica coisa que falta msm e como vou usar um delimitador para pegar somento o que vem apos o espaço na minha String primeiroDia.
obrigado desde ja.

5 Respostas

E

Ivan, não lhe ensinaram a usar substring? No seu caso, pode facilitar várias coisas.

(Na verdade essa é a primeira vez que vejo usar o método Character.toString em programas - vivendo e aprendendo)

substring é um método da classe java.lang.String que aceita 1 ou 2 parâmetros.

Com 1 parâmetro N, indica que você quer pegar tudo que está na string a partir da posição N (sendo que a primeira posição da string é a posição 0).

Por exemplo, digamos que você tenha uma string “Dia 31”. Como você deve saber, na posição 0 está a letra D, na 1 está a letra i, na 2 está a letra a,
na 3 está o espaço, e na 4 está o caracter 3, que por acaso é o início de “31”. Então, se você usar “Dia 31”.substring (4), vai pegar “31”, que é o que está na posição 4 e no que vem depois dela, que é a posição 5.

Por exemplo:

String entrada = "Dia 31";
String dia = entrada.substring (4);

Com 2 parâmetros N e M, indica que você quer pegar um pedaço da string que começa na posição N e termina na posição M - 1. (sendo que a primeira posição da string é a posição 0).
Ambas as posições devem existir dentro da string, senão você pode tomar uma exceção.

Por exemplo, digamos que você tenha uma string “10 : 20 : 30”, e você quer pegar o “20”, ou seja, é a substring que está nas posições de 5 a 6.

Para facilitar, eu costumo fazer um diagrama assim:

0123456789012345
10 : 20 : 30

O programa que você teria de usar é:

String entrada = "10 : 20 : 30";
String minuto = entrada.substring (5, 7);

Note que eu passei 5 (que é a posição inicial) e 7 (que é 1 DEPOIS da posição final, que é 6).

Cuidado que isso é diferente de várias linguagens (como VB, C# etc.) onde um método com nome semelhante (no VB é MID, no C# é Substring) onde o segundo parâmetro é o comprimento desejado, e se não conseguir pegar o comprimento desejado, não faz mal. No caso do Java, se você passar uma posição que não existe, vai dar problemas.

T

Java StringTokenizer example: http://www.mkyong.com/java/java-stringtokenizer-example/

carolino

Fala amigo…

Já que você quer pegar só o número,

você poderia usar expressão regular também

String primeiroDia = "Dia 5";
		
    String numero = primeiroDia.replaceAll("[A-Za-z]", "").trim();
		
    System.out.println(numero);

a expressão regular “[A-Za-z]” irá pegar todas as letras e o replaceAll irá remover deixando só os números

drsmachado

carolino:
Fala amigo…

Já que você quer pegar só o número,

você poderia usar expressão regular também

String primeiroDia = "Dia 5";
		
    String numero = primeiroDia.replaceAll("[A-Za-z]", "").trim();
		
    System.out.println(numero);

a expressão regular “[A-Za-z]” irá pegar todas as letras e o replaceAll irá remover deixando só os números


Mas regex não tem uma performance pior que o substring?
Claro que eu sei que performance não é algo com o que ele vai se preocupar agora, mas, se alguém tiver necessidade semelhante, pode ter problemas…

I

entanglement:
Ivan, não lhe ensinaram a usar substring? No seu caso, pode facilitar várias coisas.

(Na verdade essa é a primeira vez que vejo usar o método Character.toString em programas - vivendo e aprendendo)

substring é um método da classe java.lang.String que aceita 1 ou 2 parâmetros.

Com 1 parâmetro N, indica que você quer pegar tudo que está na string a partir da posição N (sendo que a primeira posição da string é a posição 0).

Por exemplo, digamos que você tenha uma string “Dia 31”. Como você deve saber, na posição 0 está a letra D, na 1 está a letra i, na 2 está a letra a,
na 3 está o espaço, e na 4 está o caracter 3, que por acaso é o início de “31”. Então, se você usar “Dia 31”.substring (4), vai pegar “31”, que é o que está na posição 4 e no que vem depois dela, que é a posição 5.

Por exemplo:

String entrada = "Dia 31";
String dia = entrada.substring (4);

Com 2 parâmetros N e M, indica que você quer pegar um pedaço da string que começa na posição N e termina na posição M - 1. (sendo que a primeira posição da string é a posição 0).
Ambas as posições devem existir dentro da string, senão você pode tomar uma exceção.

Por exemplo, digamos que você tenha uma string “10 : 20 : 30”, e você quer pegar o “20”, ou seja, é a substring que está nas posições de 5 a 6.

Para facilitar, eu costumo fazer um diagrama assim:

0123456789012345
10 : 20 : 30

O programa que você teria de usar é:

String entrada = "10 : 20 : 30";
String minuto = entrada.substring (5, 7);

Note que eu passei 5 (que é a posição inicial) e 7 (que é 1 DEPOIS da posição final, que é 6).

Cuidado que isso é diferente de várias linguagens (como VB, C# etc.) onde um método com nome semelhante (no VB é MID, no C# é Substring) onde o segundo parâmetro é o comprimento desejado, e se não conseguir pegar o comprimento desejado, não faz mal. No caso do Java, se você passar uma posição que não existe, vai dar problemas.

Muito obrigado entanglement me ajudou bastante, alem de ter otimizado e deixado meu codigo mais legivel.

Criado 1 de agosto de 2013
Ultima resposta 2 de ago. de 2013
Respostas 5
Participantes 5