# Methode, die Buchstaben in Zahlen umwandelt?



## Gast (2. Dez 2005)

Gibt es in java eine Methode, die Buchstaben in die korrespondierenden Zahlen umwandelt?
Zum Beispiel wäre A = 0, B = 1, usw. 

Ich habe jetzt eine Funktion dafür geschrieben, fände es aber schöner, wenn es eine Java-Methode dafür gäbe, habe aber in der API keine gefunden.

Vielen Dank!


----------



## Lim_Dul (2. Dez 2005)

Warum soll A 0 entsprechen? A entspricht als Ascii Zeichen der 65 bzw. dem entsprechenden Unicode Wert.


----------



## Beni (2. Dez 2005)

chars sind auch nur Ganzzahlen. Daher:

```
char x = ...
int y = x; // oder auch "y = (int)x"
```


----------



## SlaterB (3. Dez 2005)

zahl = ((int)zeichen)-58; oder so wenn A bei 0 anfangen soll, siehe ASCII-Tabelle, 

das ist so einfach und abhängig von den eigenen Bedürfnissen (etwa Groß A oder klein a),
dass man sowas nicht unbedingt sinnvoll in eine Klassenbibliothek einbauen kann


----------



## L-ectron-X (3. Dez 2005)

Wenn du jetzt fragst: ASCII-Tabelle?
Hier ein Programm, welches eine ASCII-Tabelle ausgibt.

ASCII-Code-Generator

```
public class ASCIIGen {
   public static void main(String[] args) {
      char zeichen = 0;
      
      for(int i = 0; i < 256; i++) {
         zeichen = (char)i;
         System.out.print(i+": "+zeichen+"\t");
         
         if((i % 8) == 0) { //Zeilenumbruch nach 8 Ausgaben
            System.out.println();
         }
      }
      
      System.out.println("\n");
   }
}
```

Dabei auch schön zu sehen, wie aus ints (ganzen Zahlen) Buchstaben werden.


----------



## Gast (4. Dez 2005)

Danke!

Ich brauchte die Funktion für eine Verschlüsselung (affine Chiffre), deshalb die Umrechnung von Buchstaben in Zahlen. 

Ich hatte die folgende Funktion und als ascii_const 65 für Großbuchstaben und 97 für Kleinbuchstaben benutzt und wollte nur sichergehen, dass es nicht bereits eine Funktion dafür gibt.


```
static int letterToInt(char letter, int ascii_const){
	   int i = (int) letter;
	   i = i - ascii_const;
	   return i;
	}
```


----------



## messi (4. Dez 2005)

```
public static int letterCode(char c) {
    switch (c) {
        case 'A': case 'B': case 'C': case 'D':
        case 'E': case 'F': case 'G': case 'H':
        case 'I': case 'J': case 'K': case 'L':
        case 'M': case 'N': case 'O': case 'P':
        case 'Q': case 'R': case 'S': case 'T':
        case 'U': case 'V': case 'W': case 'X':
        case 'Y': case 'Z':
            return c - 'A';
        case 'a': case 'b': case 'c': case 'd':
        case 'e': case 'f': case 'g': case 'h':
        case 'i': case 'j': case 'k': case 'l':
        case 'm': case 'n': case 'o': case 'p':
        case 'q': case 'r': case 's': case 't':
        case 'u': case 'v': case 'w': case 'x':
        case 'y': case 'z':
            return c - 'a' + 26;
        default:
            throw new IllegalArgumentException("letter: " + c);
    }
}
```


----------



## The_S (4. Dez 2005)

messi hat gesagt.:
			
		

> ```
> public static int letterCode(char c) {
> switch (c) {
> case 'A': case 'B': case 'C': case 'D':
> ...



Äh, was soll das darstellen? Wenn man ma ganz bescheiden fragen darf .


----------



## messi (5. Dez 2005)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Äh, was soll das darstellen? Wenn man ma ganz bescheiden fragen darf .


Die schnellere Variante hiervon:

```
public static int letterCode(char c) {
    if (c >= 'A' && c <= 'Z')
        return c - 'A';
    if (c >= 'a' && c <= 'z')
        return c - 'a' + 26;
    throw new IllegalArgumentException("letter: " + c);
}
```
Weißt du, was ein tableswitch ist?


----------



## The_S (5. Dez 2005)

@ messi,

sry hatte gerade ne Denksperre drin.   . Warum net einfach mit isUpperCase() überprüfen?

war das

"Weißt du, was ein tableswitch ist?"

an mich gerichtet?


----------



## messi (5. Dez 2005)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> Warum net einfach mit isUpperCase() überprüfen?


Zu umfangreich, zu langsam. Außerdem hatte ich den Code gerade zur Hand.



			
				Hobbit_Im_Blutrausch hat gesagt.:
			
		

> war das
> "Weißt du, was ein tableswitch ist?"
> an mich gerichtet?


Ja, du hattest mich gefragt, was das darstellen soll. Deshalb war ich mir nicht ganz sicher, ob du die beiden Typen vom switch-Statement kennst.


----------



## The_S (5. Dez 2005)

jup, kenn ich. War ja wie gesagt nen Denkfehler meinerseits ???:L  :wink:


----------



## thE_29 (5. Dez 2005)

Würde trotzdem mal das probieren und mitstoppen zwecks Zeit 



```
public static int letterCode(char c) 
{
   if(Character.isLetter(c) && Character.isLowerCase(c))
    return c - 'a' + 26;
   if(Character.isLetter(c) && Character.isUpperCase(c))
    return c - 'A';
   throw new IllegalArgumentException("letter: " + c);
}
```


In Java gibts für alles Klassen, also verwendet diese auch


----------



## messi (5. Dez 2005)

thE_29 hat gesagt.:
			
		

> Würde trotzdem mal das probieren und mitstoppen zwecks Zeit
> (snip)
> In Java gibts für alles Klassen, also verwendet diese auch


Es sei denn natürlich, deren Methoden machen weniger bzw. mehr als eigentlich verlangt ist. Oder müssen wir dann trotzdem?

isLetter(char):

Determines if the specified character (Unicode code point) is a letter.

A character is considered to be a letter if its general category type, provided by getType(codePoint), is any of the following:

    * UPPERCASE_LETTER
    * LOWERCASE_LETTER
    * TITLECASE_LETTER
    * MODIFIER_LETTER
    * OTHER_LETTER 

Not all letters have case. Many characters are letters but are neither uppercase nor lowercase nor titlecase.
isLowerCase(char):

Determines if the specified character is a lowercase character.

A character is lowercase if its general category type, provided by Character.getType(ch), is LOWERCASE_LETTER.

The following are examples of lowercase characters:

 a b c d e f g h i j k l m n o p q r s t u v w x y z
 '\u00DF' '\u00E0' '\u00E1' '\u00E2' '\u00E3' '\u00E4' '\u00E5' '\u00E6' 
 '\u00E7' '\u00E8' '\u00E9' '\u00EA' '\u00EB' '\u00EC' '\u00ED' '\u00EE'
 '\u00EF' '\u00F0' '\u00F1' '\u00F2' '\u00F3' '\u00F4' '\u00F5' '\u00F6'
 '\u00F8' '\u00F9' '\u00FA' '\u00FB' '\u00FC' '\u00FD' '\u00FE' '\u00FF'

Many other Unicode characters are lowercase too.
isUpperCase(char):

Determines if the specified character is an uppercase character.

A character is uppercase if its general category type, provided by Character.getType(ch), is UPPERCASE_LETTER.

The following are examples of uppercase characters:

 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
 '\u00C0' '\u00C1' '\u00C2' '\u00C3' '\u00C4' '\u00C5' '\u00C6' '\u00C7'
 '\u00C8' '\u00C9' '\u00CA' '\u00CB' '\u00CC' '\u00CD' '\u00CE' '\u00CF'
 '\u00D0' '\u00D1' '\u00D2' '\u00D3' '\u00D4' '\u00D5' '\u00D6' '\u00D8'
 '\u00D9' '\u00DA' '\u00DB' '\u00DC' '\u00DD' '\u00DE'

Many other Unicode characters are uppercase too.


----------

