Je veux changer les lettres A en 1 et donc la lettre Z être le numéro 26, puis changé à nouveau en nombre 27 lettres AA, AB à 28. Comment le faire? Dois-je utiliser le "commutateur"? J'utilise le programme Java.Convertir une lettre en chiffres
Répondre
n'a pas testé, mais quelque chose le long de ces lignes devrait fonctionner:
public String numberToCharacterRepresentation(int number) {
char[] ls = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
String r = "";
while(true) {
r = ls[number % 26] + r;
if(number < 26) {
break;
}
number /= 26;
}
return r;
}
L'inverse:
public int stringToNumber(String str) {
char[] ls = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
Map<Character, Integer> m = new HashMap<Character, Integer>();
int j = 0;
for(char c: ls) {
m.put(c, j++);
}
int i = 0;
int mul = 1;
for(char c: new StringBuffer(str).reverse().toString().toCharArray()) {
i += m.get(c) * mul;
mul *= ls.length;
}
return i;
}
Wow merci: D. Mais comment convertir un exemple de lettre suivante AA = 27, AB = 28, AC = 29, AD = 30? – Leostrada
Comment faire un snapshot java comme ça? – Leostrada
@Jonathon Merci pour les jolies retouches! @Leostrada stringToNumber devrait vous donner l'inverse. Vous devriez lire à propos des conversions de base de nombre, car il s'agit essentiellement d'une conversion de base 26 à base 10. Voici un exemple de lien: http://www.cut-the-knot.org/recurrence/conversion.shtml –
Comment l'utilisation de c-'A '+ 1 pour convertir la lettre c au nombre que vous voulez? Calculer l'endroit suivant serait le même sauf ajouter 27 à la place. Fondamentalement, ce que vous faites est de convertir un nombre de base-26 en décimal, sauf que vous n'avez pas de zéro.
c-'A '+ 1 signifie si j'écris AA puis sera converti en 27? – Leostrada
Cela fera le travail.
public String map(int i) {
String res = "";
if (i <= 0) {
throw new IllegalArgumentException("Can only map +ve numbers");
}
while (i > 0) {
res = Character.toString('A' + ((i - 1) % 26)) + res;
i = i/26;
}
return res;
}
Une version plus compliquée à l'aide d'un StringBuilder
serait plus efficace, mais celui-ci est plus facile à comprendre.
Comment faire un snapshot java comme ça? – Leostrada
@Leostrada - Je ne comprends pas votre question. –
Il demande comment formater le code sur SO. –
Peut-être la façon la plus simple pour A-Z serait quelque chose comme:
char c = *whatever letter you need*;
int cAsInt = Integer.toString(c - '@'); // @ is 1 less than A
Pour des choses comme AA, BB, etc., il dépendra de combien de combinaisons dont vous avez besoin. Configurer un mapping peut être le plus rapide, mais si les possibilités sont infinies, vous devrez trouver une formule.
Utilisez l'objet de caractères 0 => 0 a => 10, etc. Si vous utilisez uniquement des lettres déduisez 10
Character.forDigit(10,Character.MAX_RADIX) //will return 'a'
Character.getNumericValue('a') // will return 10
Une solution simple consiste à traiter le problème comme écrire des lettres au lieu de chiffres.
public static String asLetters(long num) {
StringBuilder sb = new StringBuilder();
while(num > 0) {
sb.append((char) ('@' + num % 26));
num /= 26;
}
return sb.toString();
}
par intérêt, quelle est la signification du @? – Toby
''@'' est ''A '- 1' –
import javax.swing.JOptionPane;
public class TBesar{
public static long x(int a, int b){
if (b==0){
return(1);
}
else{
return(a*(x(a,(b-1))));
}
}
public static long KatakeAngka(String nama){
int A = 0;
int B = 26;
long C = 0;
long Z;
int panjang = nama.length();
char namas[] = new char[panjang];
for (int i=0;i<panjang;i++){
namas[i] = nama.charAt(i);
switch (namas[i]){
case 'a' : A=1;break;
case 'b' : A=2;break;
case 'c' : A=3;break;
case 'd' : A=4;break;
case 'e' : A=5;break;
case 'f' : A=6;break;
case 'g' : A=7;break;
case 'h' : A=8;break;
case 'i' : A=9;break;
case 'j' : A=10;break;
case 'k' : A=11;break;
case 'l' : A=12;break;
case 'm' : A=13;break;
case 'n' : A=14;break;
case 'o' : A=15;break;
case 'p' : A=16;break;
case 'q' : A=17;break;
case 'r' : A=18;break;
case 's' : A=19;break;
case 't' : A=20;break;
case 'u' : A=21;break;
case 'v' : A=22;break;
case 'x' : A=23;break;
case 'w' : A=24;break;
case 'y' : A=25;break;
case 'z' : A=26;break;
}
int D = panjang-(i+1);
Z = (x(B,D))*A;
C = C+Z;
}return(C);
}
public static String hitung(long angka){
String B ;
if(angka<27){
if(angka==1){
B="a";
}else if(angka==2){
B="b";
}else if(angka==3){
B="c";
}else if(angka==4){
B="d";
}else if(angka==5){
B="e";
}else if(angka==6){
B="f";
}else if(angka==7){
B="g";
}else if(angka==8){
B="h";
}else if(angka==9){
B="i";
}else if(angka==10){
B="j";
}else if(angka==11){
B="k";
}else if(angka==12){
B="l";
}else if(angka==13){
B="m";
}else if(angka==14){
B="n";
}else if(angka==15){
B="o";
}else if(angka==16){
B="p";
}else if(angka==17){
B="q";
}else if(angka==18){
B="r";
}else if(angka==19){
B="s";
}else if(angka==20){
B="t";
}else if(angka==21){
B="u";
}else if(angka==22){
B="v";
}else if(angka==23){
B="w";
}else if(angka==24){
B="x";
}else if(angka==25){
B="y";
}else{B="z";}
return(B);
}
else{
return(hitung(angka/26)+hitung(angka%26));
}
}
public static void main (String [] args){
String kata = JOptionPane.showInputDialog(null,"Masukkan Kata ke 1");
String kata2 = JOptionPane.showInputDialog(null, "Masukkan Kata ke 2");
long hasil = KatakeAngka(kata);
long hasil2 = KatakeAngka(kata2);
long total = hasil+hasil2;
String HasilKata = hitung(total);
JOptionPane.showMessageDialog(null,kata+" = "+hasil+"\n"+kata2+" = "+hasil2+"\n"+kata+" + "+kata2+" = "+HasilKata);
}
}
Pour ceux qui veulent le faire pour Excel:
public String getEquivColumn(int number){
String converted = "";
// Repeatedly divide the number by 26 and convert the
// remainder into the appropriate letter.
while (number >= 0)
{
int remainder = number % 26;
converted = (char)(remainder + 'A') + converted;
number = (number/26) - 1;
}
return converted;
}
Cela fonctionne pour A à ZZ:
public static int columnCharToNumber(String str) {
String alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if(str.length() == 1) {
return alphabet.indexOf(str);
}
if(str.length() == 2) {
return (alphabet.indexOf(str.substring(1)) + 26*(1+alphabet.indexOf(str.substring(0,1)))) ;
}
return -1;
}
Salut Arif, bienvenue à SO et merci pour votre réponse. Pour rendre votre réponse encore plus utile, est-ce que cela vous dérangerait de l'éditer (modifier le lien juste en dessous de la réponse) pour ajouter une explication de «pourquoi» ce code résout le problème? Cela aidera les gens à apprendre et à appliquer la solution à d'autres situations, plutôt que d'encourager simplement le codage copier-coller. Merci encore! –
- 1. En C, comment vérifier si une chaîne contient 2 chiffres, 1 lettre et 4 chiffres?
- 2. Comment convertir une chaîne numérique à 18 chiffres en BigInteger?
- 3. Convertir nombre à la lettre avec php
- 4. comment convertir une lettre donnée dans une chaîne de minuscules à majuscules en ruby
- 5. Bibliothèque ou code pour convertir les chiffres en lettres
- 6. convertir un nombre à 10 chiffres en chaîne hexadécimale
- 7. Expression régulière - commençant et finissant par une lettre, n'acceptant que des lettres, des chiffres et _
- 8. Quel est l'algorithme pour convertir une lettre de colonne Excel en son numéro?
- 9. LINQ .OrderPar lettre unique puis par une autre lettre
- 10. Comment mettre une virgule en chiffres?
- 11. preg_replace à une lettre en majuscule après une citation
- 12. En Objective-C, j'ai un NSString avec une lettre dedans. Comment puis-je obtenir la valeur ASCII de cette lettre?
- 13. Java: Éclate une chaîne quand une lettre majuscule se trouve
- 14. Affichage lettre minuterie par lettre iphone
- 15. Convertir des nombres entiers en chiffres romains en utilisant un schéma de traduction orienté syntaxiquement?
- 16. valeur int en 10 convertir en chaîne nombre à deux chiffres
- 17. Comment déterminer si un caractère est une lettre en Java?
- 18. Comment obtenir une lettre au hasard en Java?
- 19. comment vérifier le premier caractère d'une chaîne si une lettre, une lettre
- 20. Comment dessiner une lettre à bordure?
- 21. lire en chiffres en utilisant des chaînes
- 22. convertir la chaîne en double
- 23. Javascript: trouver la lettre précédente en alphabet
- 24. Dédoublement en première instance d'une lettre
- 25. Comment remplacer deux lettres ou plus par une seule lettre?
- 26. Lettre d'espacement en grand nom diminuant
- 27. correspondance un paragraphe commence par une lettre
- 28. Sauter une lettre dans le dictionnaire
- 29. Séparer les chiffres longs par 3 chiffres
- 30. Lettre en latex: Adresse alignée à droite
D'abord, vous devez définir le "changement" . Ensuite, vous devez nous dire ce que vous avez essayé et ce qui ne fonctionne pas. Est-ce censé fonctionner pour n'importe quelle chaîne de longueur? – Falmarri
Pouvez-vous m'aider comment mettre snapshot java ici? – Leostrada
Vous pouvez envisager: http://stackoverflow.com/questions/763691/programming-riddle-how-might-you-translate-an-excel-column-name-to-a-number que cette opération est l'inverse . En fait, voté pour fermer - c'est exactement la moitié du problème résolu. –