9

整数ではなく文字 (「a」から「z」) でインデックス付けされた配列を Java で作成することは可能ですか?

このような配列「a」では、たとえば、このように使用したいと思います

print (a['a']);
4

9 に答える 9

11

Javaで、整数ではなく文字('a'から'z')でインデックス付けされた配列を作成することは可能ですか?

もちろん可能です。
あなたはこのようにこれを行うことができます:

char theChar = 'x';  
print (a[theChar - 'a']);   

または、ASCII文字列のみを処理すると仮定すると、サイズ256の配列を宣言するだけです。文字を使用して配列に直接インデックスを付けます。

char[] a = new char[256];   
char theChar = 'x';  
print (a[theChar]);    

これで、大文字/小文字かどうかは関係ありません。実際、ASCII文字列に特に
関心がある場合は、単純な配列と比較して、を使用するのはやり過ぎかもしれません。配列はそれほど多くのスペースを浪費せず、おそらく(非常に効率的な構成)はそのような単純なタスクには多すぎます。MapMap

于 2012-06-17T09:19:43.580 に答える
6

Map代わりにaを使用してください。

Map<Character, Object> myMap = new HashMap<Character, Object>();
myMap.put('a', something);

print(myMap.get('a'));

一方、他の人がすでに示唆しているように、char をインデックスとして使用できます (ただし、すべての配列要素を0...'a'-1空のままにします)。

String[] a = new String['z' + 1];
a['a'] = "Hello World";
System.out.println(a['a']);
于 2012-06-17T07:27:57.157 に答える
3

26 要素の配列を作成し、常に'a'char インデックスから減算できます。

int[] array = new int[26];
array['a'-'a']=0;
array['b'-'a']=1;
\\ etc...
于 2014-11-03T10:13:51.017 に答える
2

このような単純なものはどうですか?

public static int getLetterValue(char letter) {
    return (int) Character.toUpperCase(letter) - 64;
}

そしてそれをそのように使用します:

System.out.println(a[getLetterValue('a'));

現時点では、これはかなり失敗します。範囲内などを確認する必要があります。

または、Javaリストインターフェイスを実装し、.getメソッドと.addメソッドをオーバーライドして、charを使用できるようにすることもできます。しかし、それは私の次のポイントに私をもたらします。

例外をより適切に処理し、そのようなユースケース向けに設計されたデータ構造を使用することをお勧めします。マップははるかに良い選択です。

于 2012-06-17T07:30:24.340 に答える
2

はいといいえ。はい、できます。コンパイルされます。次のコードを試してください。

class foo {
    public static void main(String[] args) throws Exception {
        int a[] = new int[100];
        a['a'] = '1';
        System.out.printf("%d\n", a['a']);
    }
}

いいえ、charsは暗黙的にintに変換されるため、探しているものとは異なります。

于 2012-06-17T07:31:57.720 に答える
0

探しているデータ構造はMap、Java ランドで呼び出されます。

このデータ構造は、PHP の連想配列など、さまざまな名前で知られています。C#、Python の辞書。この種の混乱につながるRubyなどのハッシュ。

于 2012-06-17T07:50:34.463 に答える
-1

いいえ、できません。状況では、Map代わりに使用する必要があります。

于 2012-06-17T07:27:06.203 に答える
-2

これは重複した質問だと思います!Java は文字列をインデックス配列キーとして使用できますか?を参照してください。(例: 配列["a"]=1;) .

マップを使用して文字を値にマップし、get を呼び出して値を取得する必要があります。

于 2012-06-17T07:28:07.163 に答える