Como separar uma String por caractere?[Resolvido]

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…

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…

Faria da seguinte maneira:

[code] 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);[/code]

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

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

[code]
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;
}

}[/code]

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

vlw abs…

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’…

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

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

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:

Então seria como o Jow falou:

[code] public static void main(String[] args) {
String s = “Maria”;
int tot=0;
for (char c : s.toCharArray())
tot += valorChar©;

    System.out.println(tot%9);  
}

    static int  valorChar (char c){  
	        c = Character.toUpperCase(c);  
	        return (c-'A')+1;  
	 }  [/code]

[quote=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…[/quote]

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