是否可以在Java中创建一个由字母字符('a'到'z')而不是整数索引的数组?
有了这样一个数组“a”,我想以这种方式使用它,例如
print (a['a']);
是否可以在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
对于这样一个简单的任务来说(一个非常有效的构造)可能太多了。
改用 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']);
您可以创建一个包含 26 个元素的数组,并始终'a'
从您的 char 索引中减去:
int[] array = new int[26];
array['a'-'a']=0;
array['b'-'a']=1;
\\ etc...
像这样简单的事情呢?
public static int getLetterValue(char letter) {
return (int) Character.toUpperCase(letter) - 64;
}
并像这样使用它:
System.out.println(a[getLetterValue('a'));
就目前而言,这将非常失败。您将需要检查它是否在范围内等。
或者,您可以实现 Java List 接口并覆盖 .get 和 .add 方法,以便它们可以使用字符。但这让我想到了下一点。
最好使用能够更好地处理异常并且专为此类用例设计的数据结构。地图是更好的选择。
是和不是。是的,因为你可以做到并且它会编译。试试下面的代码:
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']);
}
}
不,因为字符将被隐式转换为整数,这听起来不像您正在寻找的。
您正在寻找的数据结构Map
在 Java 领域中被调用。
这种数据结构有多种名称,例如 PHP 中的关联数组;C#、Python 中的字典;Ruby 等中的哈希会导致这种混乱。
你可以做这样的事情: - 例如:
char[] a = new char[]{'s','t'};
int[] result = new int[256];
result[a[0]]= 100;
System.out.println(result['s']);//will print 100
不,你不能那样做。在这种情况下,您应该Map
改用。
我认为这是一个重复的问题!请参阅Java 可以使用 String 作为索引数组键吗?(例如:数组[“a”]=1;)。
您应该使用映射将字母映射到值并调用 get 来获取值。