9

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

有了这样一个数组“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 字符串特别感兴趣,那么与简单的数组相比,使用 aMap可能有点过分了。该数组不会浪费太多空间,Map对于这样一个简单的任务来说(一个非常有效的构造)可能太多了。

于 2012-06-17T09:19:43.580 回答
6

改用 a 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']);
于 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 List 接口并覆盖 .get 和 .add 方法,以便它们可以使用字符。但这让我想到了下一点。

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

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

不,因为字符将被隐式转换为整数,这听起来不像您正在寻找的。

于 2012-06-17T07:31:57.720 回答
0

您正在寻找的数据结构Map在 Java 领域中被调用。

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

于 2012-06-17T07:50:34.463 回答
0

你可以做这样的事情: - 例如:

char[] a = new char[]{'s','t'};
int[] result = new int[256];
result[a[0]]= 100;
System.out.println(result['s']);//will print 100
于 2018-04-05T05:44:16.360 回答
-1

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

于 2012-06-17T07:27:06.203 回答
-2

我认为这是一个重复的问题!请参阅Java 可以使用 String 作为索引数组键吗?(例如:数组[“a”]=1;)

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

于 2012-06-17T07:28:07.163 回答