【问题标题】:Java: Create an array with letter characters as indexJava:创建一个以字母字符为索引的数组
【发布时间】:2012-06-19 15:23:34
【问题描述】:

是否可以在 Java 中创建一个由字母字符('a' 到 'z')而不是整数索引的数组?

有了这样一个数组“a”,我想这样用,比如

print (a['a']);

【问题讨论】:

    标签: java arrays indexing


    【解决方案1】:

    是否可以在 Java 中创建以字母字符为索引的数组 ('a' to 'z') 而不是整数?

    当然可以。
    你可以这样做:

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

    或假设只处理 ASCII 字符串只需声明大小为 256 的数组。使用您的字符直接索引数组。

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

    现在你不在乎它是大写/小写还是什么。
    实际上,如果您对特别是 ASCII 字符串感兴趣,使用 Map 与简单的数组相比可能会有点过分。该数组不会浪费太多空间,对于这样一个简单的任务来说,Map(一个非常有效的构造)可能太多了。

    【讨论】:

    • 为什么 ASCII 是 256 而不是 128? ASCII 是一个 7 位的代码,代表 128 个不同的字符;只是我的想法。
    【解决方案2】:

    请改用Map

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

    【讨论】:

    • new String['z' + 1] 创建一个大小为 123 的数组。最好将其声明为 new String[128] 以处理基本 ASCII 或 new String[256] 以完全处理 ASCII 字符。
    • 为什么?我不会分配超过必要的。
    • 为了清楚起见。更好地展示你的意图,额外的空间是微不足道的
    【解决方案3】:

    您可以创建一个包含 26 个元素的数组,并始终从您的字符索引中减去 'a'

    int[] array = new int[26];
    array['a'-'a']=0;
    array['b'-'a']=1;
    \\ etc...
    

    【讨论】:

      【解决方案4】:

      像这样简单的东西呢?

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

      并像这样使用它:

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

      就目前而言,这将非常失败。您需要检查它是否在范围内等。

      或者,您可以实现 Java List 接口并覆盖 .get 和 .add 方法,以便它们可以使用字符。但这让我想到了下一点。

      最好使用能够更好地处理异常并且专为此类用例设计的数据结构。 Map 是更好的选择。

      【讨论】:

        【解决方案5】:

        是和不是。是的,因为你可以做到并且它会编译。试试下面的代码:

        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']);
            }
        }
        

        不,因为字符将被隐式转换为整数,这听起来不像您要查找的内容。

        【讨论】:

          【解决方案6】:

          您要查找的数据结构在 Java 领域称为 Map

          这种数据结构有多种名称,例如 PHP 中的关联数组; C#、Python 中的字典; Ruby 等中的 hash 会导致这种混乱。

          【讨论】:

            【解决方案7】:

            你可以这样做:- 例如:

            char[] a = new char[]{'s','t'};
            int[] result = new int[256];
            result[a[0]]= 100;
            System.out.println(result['s']);//will print 100
            

            【讨论】:

            • 虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。
            【解决方案8】:

            不,你不能那样做。在这种情况下,您应该改用Map

            【讨论】:

              【解决方案9】:

              我认为这是一个重复的问题!见Can Java use String as an index array key? (ex: array["a"]=1;)

              您应该使用映射将字母映射到值并调用 get 来获取值。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多