web-dev-qa-db-fra.com

Java - comment convertir des lettres d'une chaîne en un nombre?

Je suis assez nouveau sur Java, je me demande donc comment convertir une lettre dans une chaîne en un nombre, par exemple hello world générerait comme 8 5 12 12 15 23 15 18 12 4.
alors a=1, b=2, z=26 etc. 

14
user2099816

Comme il s’agit très probablement d’une tâche d’apprentissage, je vais vous donner un indice: tous les points de code UNICODE pour les lettres de l’alphabet latin sont classés par ordre alphabétique. Si le code de a est un nombre N, le code de b est N+1, le code de c est N+2 et ainsi de suite; le code de Z est N+26.

Vous pouvez soustraire des points de code de caractères de la même manière que vous soustrayez des entiers. Puisque les points de code sont classés par ordre alphabétique, le calcul suivant

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

produit le numéro de séquence de h, c'est-à-dire 8. Si vous effectuez ce calcul en boucle, vous obtiendrez le résultat dont vous avez besoin.

Notez que la formule ci-dessus ne fonctionne qu'avec des caractères du même registre. Si votre chaîne de saisie est en casse mixte, vous devez convertir chaque caractère en minuscule avant de procéder au calcul, sinon il serait erroné.

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

Cela ne traite pas de l'espace, etc.

1
Joop Eggen

pour chaque caractère à la position i: sortie s.charAt (i) - 'a' + 1. s est la chaîne.

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 une carte avec la clé étant le caractère et une valeur étant les entiers. Ce n'est pas un moyen efficace - la carte doit être un membre statique de la 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

Vous pouvez faire quelque chose comme:

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

Si vous avez besoin, vous pouvez utiliser le code testé ci-dessous pour convertir une chaîne en nombre si votre chaîne ne contient que des nombres et des alphabets.

 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

J'ai ajouté tous les personnages pour obtenir un résultat juste:

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