Como separar uma String por caractere?[Resolvido]

10 respostas
sanzo

Olá amigos,

Sou mais um iniciante em java, estou fazendo um curso basico em uma faculdade aqui da minha cidade, mas ainda estou na 3ª aula sendo que cada uma é de 4 hs…

Alem de estar pesquisando bastante fora do curso, tenho aprendido muito aqui com vocês, e ainda participando de um curso online nesse site: http://jedi.wv.com.br/

o caso é o seguinte:

Minha irmã é esoterica e trabalha com numerologia e como eu estava afim de alguma coisa para praticar, e que essa coisa fosse realmente util para alguem, tive a ideia de tentar fazer um programa que lêse os dados e fizesse os calculos, e com o resultado da soma retornasse o texto ja pre estabelecido:

mas a linha de soma que a numerologia segue é diferente e ao me deparar com o tipo de calculo que ela faz, não sei como fazer o programa dividir os caracteres… vou tentar esplicar com um exemplo:

vamos calcular a data de nascimento da minha filha: 22/03/2003

soma: 2+2+0+3+2+0+0+3 = 12 1+2 = 3 // 3 é o numero que eu preciso…

pensei em fazer um:

int diaNescimento;

int mesNescimento;

int anoNescimento;

Mas não consigo conceber como posso separar os numeros de forma individual pra fazer esse tipo de soma…

e o pior acontece com a String, quando o calculo seria feito com o nome da pessoa! Uma vez que cada letra tem seu valor pre-definido, como eu por exemplo vou poder pegar o nome: MARIA, converter essa string em int de forma individual e somar…

alguem poderia dar uma luz?
desde ja obrigado…

não postei codgos pois não tenho nenhum ainda, estou apenas vendo as possibilidade…

10 Respostas

Diego_Marinho
thiagobernardo_si

Ae sanzo blz?

Cara a primeira questão você pode fazer da seguinte forma (talvez não a melhor, mas…):

Classe para conversão

package br.com.numerologia;

public class Numerologia {
	
	private int calcula;
	private String resultado;
	private String resultadoString;

	//metodo responsável por fazer a conversão - recebe uma string
	public void fazConversao(String numero){	
		
		numero = numero.replaceAll("/", "");
		
		//Zera a variavel quando o metodo é chamado
		this.calcula = 0;
	
		for(int i=0; i < numero.length(); i++){
			
			//variaveis para conversao
			char pegaCharDaString;
			String converteCharParaString;
			
			//atribui o valor da posição na variavel char
			pegaCharDaString = numero.charAt(i);		
			//converte o char pata string, pois não é possivel converter char para int direto
			converteCharParaString = String.valueOf(pegaCharDaString);			
			
			//a variavel calcula recebe a string como valor
			this.calcula += Integer.parseInt(converteCharParaString);		
		}		
	}
	//mostra o resultado
	public int getResultado(){
		return this.calcula;
	}
	
}

Main class

package br.com.numerologia;

import javax.swing.JOptionPane;

public class ExecutaNumerologia {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws IndexOutOfBoundsException {
		// TODO Auto-generated method stub

		String data;
		String resultado;

		// cria instancia de numerologia
		Numerologia numerologia = new Numerologia();

		//captura a data
		data = JOptionPane.showInputDialog(null, "Digite a data de nascimento",
				"Digite a data de nascimento");
		
		// passa a string data para o metodo responsavel pela conversão e soma dos caracteres
		numerologia.fazConversao(data);

		// resultado recebe o resultado da conversao como inteiro
		resultado = Integer.toString(numerologia.getResultado());

		// aqui chamo o metodo novamente passando o resultado da primeira
		// conversao como string
		numerologia.fazConversao(resultado);

		// aqui exibi o resultado final
		System.out.println(numerologia.getResultado());

	}

}

Sua segunda pergunta não ficou muito clara. Explica melhor…
Se alguma coisa não ficou clara no meu código fala ae…

Espero ter ajudado…
flw abs…

pedroroxd
Faria da seguinte maneira:
System.out.println("Digite o dia no formato dd/mm/aaaa. Ex.: 20/01/1994");
		String _stringnum = new Scanner(System.in).next();
		int acumulador = 0;
		
		_stringnum = _stringnum.replaceAll("/", "");

		for (int i = 0; i < _stringnum.length(); i++) {			
			acumulador += Integer.parseInt(String.valueOf(_stringnum.charAt(i))); 
		}
		
		_stringnum = String.valueOf(acumulador);
		acumulador = 0;
		System.out.println("A soma primária é: " + _stringnum);
		for (int i=0;i<_stringnum.length();i++) {
			acumulador+= Integer.parseInt(String.valueOf(_stringnum.charAt(i)));
		}
		
		System.out.println("A soma total é: " + acumulador);
Olhe o exemplo da saída: Digite o dia no formato dd/mm/aaaa. Ex.: 20/01/1994 [color=green]20/01/1994[/color] A soma primária é: 26 A soma total é: 8
thiagobernardo_si

Pow pedroroxd,

Não sabia que dava para chamar duas conversoes assim direto heehhehe

Com isso economizei algumas linhas de códigos...

Classe do calculo

public class Numerologia {
	
	private int calcula;
	private String resultado;
	private String resultadoString;

	//metodo responsável por fazer a conversão - recebe uma string
	public void fazConversao(String numero){		
		
		numero = numero.replaceAll("/", "");
		
		//Zera a variavel quando o metodo é chamado
		this.calcula = 0;
	
		for(int i=0; i < numero.length(); i++){
						
			this.calcula += Integer.parseInt(String.valueOf(numero.charAt(i)));
		}		
	}
	//mostra o resultado
	public int getResultado(){
		return this.calcula;
	}
	
}

Mas chamara o método duas vezes não seria melhor?

vlw abs...

JoW

na questão da data é só fazer como já foi falado
pegar o valor de cada caractere recebido e somar, e no final fazer a “noves fora” que é (resultado%9)…

já pra fazer isso com o nome da pessoa eu passaria tudo pra maiusculo (função toUpperCase() ), e pegaria a diferença de cada caractere para o caractere ‘A’…

JoW
static int valorChar (char c){
        c = Character.toUpperCase(c);
        return (c-'A')+1;
    }
    static int valorPalavra (String s){
        int tot=0;
        for (char c : s.toCharArray())
            tot += valorChar(c);
        return tot%9;
    }

Nesse caso é como fazer p pegar o valor dos nomes…
é só vc tirar os espaços entre as palavras e jogar como parametro no metodo valorPalavra(nomeAqui)
n sei se fui claro…

exemplo:

String nome = Fulano de tal;

String nomeSemEspaco = nome.replaceAll(" ", “”);

int valorNome = valorPalavra (nomeSemEspaco );
pedroroxd

Não faria diferença nesse caso.
Não entendi o que você queria fazer com o nome da pessoa… O que seria?

sanzo

opa,

muito obrigado aos que ajudaram…
estou testando os codigos e a lógica usada, mas como disse… eu ainda sou iniciante e tem algumas expressoes usados as quais eu não estou familiarizado, estou estudando-as para entender melhor o codigo!!!

mas em sua grande parte eu entendi e ja da pra dar prosseguimento ao projeto…

quanto ao nome:

imagine o nome(string): MARIA

e que cada uma das letras tem um valor, tipo:

a, j, s = 1;

b, t = 2;

c, l, u = 3;

d, m = 4;

e, n, w = 5;

f, o, x = 6;

g, p, y = 7;

h, q, z = 8;

i, r = 9;

k = 11;

v = 22;

assim sendo os valores reais para o calculo que eu preciso são: 4+1+9+9+1 = 24 2+4 = 6

tenho que transformar cada CHAR da String em um int…

obrigado, mesmo não usando o codigo posto aqui e sim um o qual eu mesmo estou fazendo com base nas informações enviadas por vocês… no minimo esta sendo de grande aprendizado…

:smiley:

pedroroxd
Então seria como o Jow falou:
public static void main(String[] args) {	
		String s = "Maria";
        int tot=0;  
        for (char c : s.toCharArray())  
            tot += valorChar(c);  
        
        System.out.println(tot%9);  
	}
	
	    static int  valorChar (char c){  
		        c = Character.toUpperCase(c);  
		        return (c-'A')+1;  
		 }
kemperacc

sanzo:
Olá amigos,

Sou mais um iniciante em java, estou fazendo um curso basico em uma faculdade aqui da minha cidade, mas ainda estou na 3ª aula sendo que cada uma é de 4 hs…

Alem de estar pesquisando bastante fora do curso, tenho aprendido muito aqui com vocês, e ainda participando de um curso online nesse site: http://jedi.wv.com.br/

o caso é o seguinte:

Minha irmã é esoterica e trabalha com numerologia e como eu estava afim de alguma coisa para praticar, e que essa coisa fosse realmente util para alguem, tive a ideia de tentar fazer um programa que lêse os dados e fizesse os calculos, e com o resultado da soma retornasse o texto ja pre estabelecido:

mas a linha de soma que a numerologia segue é diferente e ao me deparar com o tipo de calculo que ela faz, não sei como fazer o programa dividir os caracteres… vou tentar esplicar com um exemplo:

vamos calcular a data de nascimento da minha filha: 22/03/2003

soma: 2+2+0+3+2+0+0+3 = 12 1+2 = 3 // 3 é o numero que eu preciso…

pensei em fazer um:

int diaNescimento;

int mesNescimento;

int anoNescimento;

Mas não consigo conceber como posso separar os numeros de forma individual pra fazer esse tipo de soma…

e o pior acontece com a String, quando o calculo seria feito com o nome da pessoa! Uma vez que cada letra tem seu valor pre-definido, como eu por exemplo vou poder pegar o nome: MARIA, converter essa string em int de forma individual e somar…

alguem poderia dar uma luz?
desde ja obrigado…

não postei codgos pois não tenho nenhum ainda, estou apenas vendo as possibilidade…

Isso é programação recursiva, veja:

private static long getNumero(long numero) {
        
        long soma = 0;

        for (Character ch : new Long(numero).toString().toCharArray()) {
            soma += new Integer(ch.toString()).intValue();
        }
        
        if (soma>9){
            return getNumero(soma);
        }else{
            return soma;
        }
        
    }

//para usar:
System.out.println(getNumero(18071980));

[]s

Kemper

Criado 25 de abril de 2010
Ultima resposta 27 de abr. de 2010
Respostas 10
Participantes 6