2016-07-06 13 views
2

5文字コードの数値表現を作成したいと思います。コードの文字数は1〜5文字です。5桁の文字列を数字で表すには?

数字はもちろんユニークでなければなりません。これらの数字をアスキーに戻すことが絶対に必要なわけではありません。

したがって私はできるだけ小さくなければならない0からZZZZZ

得番号サイズ桁を必要とします。

私は次のように始めたが、それは私が欲しいものはかなりありません:あなたの番号のすべての可能な「数字」を列挙することにより、

String a="ZZZZZZ"; 
for (int i = 0; i < a.length(); ++i) { 
    System.out.print(a.charAt(i)-'A'+1); 
} 

ZZZZZZ=262626262626 
000000=-16-16-16-16-16-16 
+0

なぜ各文字をアルファベットのインデックスにマップしませんか? A = 1、B = 2などである。 – asenovm

+0

大文字と小文字を区別しますか? – JRsz

+0

https://docs.oracle.com/javase/8/docs/api/java/lang/Character.html#digit-char-int- – assylias

答えて

9

スタート:9

  • テン桁0
  • 26文字AZ

5桁に36桁の「数字」があるため、最大数は36 = 60,466,176です。この数字はintに該当します。

あなたはInteger.parseIntを呼び出して、36の基数渡すことで、この数字を行うことができます。A134Zはすでに数であることに留意してください

System.out.println(Integer.parseInt("ABZXY", 36)); // 17355958 

Demo.

+0

大文字のみの場合も同様ですか?それとももっと良い会話方法がありますか? – membersound

+1

@ mememarks小数点を削除すると、基数26の変換を使用するとより経済的になります。しかし、変換を自分で書く必要があります。基本的に 'A'を減算し、次の数字をループで' val = val * 26 + c - 'A''で追加する必要があります。 – dasblinkenlight

2

を。これはBase-36表現でのみ表示されます。

1文であっても、0-9とA-Zの5文字の文字列を数字(および後ろ)に変換するために必要なことは、上記のとおりです。

1

この文字列は、base36(A = 10、B = 11 ... Z = 35)の数字として扱うことができます。この方法では、0〜36^5-1の数字を正確に使用し、それぞれ1回だけ使用されます。

2

最も簡単な解決策 - 文字が大文字と小文字を区別しない場合は、36のアルファベットと10桁の数字を使用することです。そのようにして、文字列から文字列への変換と、長い文字列から次のような長い文字列への両方の関数を自由に得ることができます:

long numericCode = Long.parseLong("zzzzz", 36); // gives 60466175 
String stringCode = Long.toString(numericCode, 36); // gives "zzzzz" 
関連する問題