ti-enxame.com

Java - como converter letras em uma string para um número?

Eu sou muito novo em Java, então eu estou querendo saber como você converter uma letra em uma seqüência de caracteres para um número, e. hello world seria emitido como 8 5 12 12 15 23 15 18 12 4.
então a=1, b=2, z=26 etc. 

14
user2099816

Como essa é provavelmente uma tarefa de aprendizado, darei uma dica: todos os pontos de código UNICODE para as letras do alfabeto latino são ordenados alfabeticamente. Se o código de a for algum número N, então o código de b é N+1, o código de c é N+2 e assim por diante; o código de Z é N+26.

Você pode subtrair pontos de código de caractere da mesma maneira que subtrai números inteiros. Como os pontos de código são alfabetizados, o seguinte cálculo

char ch = 'h';
int pos = ch - 'a' + 1;

produz o número de sequência de h, ou seja, 8. Se você executar esse cálculo em um loop, obterá o resultado necessário.

Observe que a fórmula acima funciona apenas com caracteres do mesmo registro. Se sua string de entrada estiver em maiúsculas e minúsculas, você precisará converter cada caractere em minúsculo antes de fazer o cálculo, caso contrário, ele sairia errado.

47
dasblinkenlight
String s = "hello world";
String t = "";
for (int i = 0; i < s.length(); ++i) {
    char ch = s.charAt(i);
    if (!t.isEmpty()) {
        t += " ";
    }
    int n = (int)ch - (int)'a' + 1;
    t += String.valueOf(n);
}
System.out.println(t);

Isso não lida com o espaço, etc.

1
Joop Eggen

para cada caractere na posição i: saída s.charAt (i) - 'a' + 1. s é a string.

1
user2018791
public static void main(String[] args) {
    String s = "hello world";
    s = s.replace(" ", "");
    char[] c = s.toCharArray();

    for (Character ss : c)
        System.out.println(ss - 'a' + 1);
}
1
Achintya Jha

Usa um Mapa com a chave sendo o caractere e um valor sendo os inteiros. Esta não é uma maneira eficiente - o mapa deve ser um membro estático da classe.

import Java.util.HashMap;
import Java.util.Map;


public class JavaApplication1 
{
    public static void main(String[] args) 
    {
        final Map<Character, Integer> map;
        final String str = "hello world";

        map = new HashMap<>();  
        // or map = new HashMap<Character, Integer> if you are using something before Java 7.
        map.put('a', 1);
        map.put('b', 2);
        map.put('c', 3);
        map.put('d', 4);
        map.put('e', 5);
        map.put('f', 6);
        map.put('g', 7);
        map.put('h', 8);
        map.put('i', 9);
        map.put('j', 10);
        map.put('k', 11);
        map.put('l', 12);
        map.put('m', 13);
        map.put('n', 14);
        map.put('o', 15);
        map.put('p', 16);
        map.put('q', 17);
        map.put('r', 18);
        map.put('s', 19);
        map.put('t', 20);
        map.put('u', 21);
        map.put('v', 22);
        map.put('w', 23);
        map.put('x', 24);
        map.put('y', 25);
        map.put('z', 26);

        for(final char c : str.toCharArray())
        {
            final Integer val;

            val = map.get(c);

            if(val == null)
            {   
                // some sort of error
            }
            else
            {
                System.out.print(val + " ");
            }
        }

        System.out.println();
    }
}
1
TofuBeer

Você pode fazer algo como:

for (int i = 0; i < a.length(); ++i) {
  if (a.charAt(i) >= 'a' && a.charAt(i) <= 'z') {
    System.out.println((int)a.charAt(i) - (int)'a');
  } 
}
0
Ivaylo Strandjev

Se você precisar, pode usar o código abaixo testado para converter uma string em número, se a sua string contiver apenas números e alfabetos.

 public static Long getNumericReferenceNumber(String str) {

        String result = "";

        for (int i = 0; i < str.length(); i++) {

            char ch = str.charAt(i);

            if (Character.isLetter(ch)) {
                char initialCharacter = Character.isUpperCase(ch) ? 'A' : 'a';
                result = result.concat(String.valueOf((ch - initialCharacter + 1)));
            } else result = result + ch;
        }

        return Long.parseLong(result);
    }
0
Amol Suryawanshi

Eu adicionei todos os personagens para obter um resultado justo:

public static long stringToNumber(String s) {
    long result = 0;

    for (int i = 0; i < s.length(); i++) {
        final char ch = s.charAt(i);
        result += (int) ch;
    }

    return result;
}
0
Dan Alboteanu