I have the following array
String[] arrKey = new String[] {"A","B","C","D","E",......"Y","Z"};
我想要在数组中查找字母的位置并返回其索引。 比如我想要查找字母"E",当我搜索这个数组时,它应该给我"E"的位置,所以我应该得到索引位置4。我不想用循环来实现,请问有没有可能?我已经查遍了各种资料,但是找不到答案。
I have the following array
String[] arrKey = new String[] {"A","B","C","D","E",......"Y","Z"};
我想要在数组中查找字母的位置并返回其索引。 比如我想要查找字母"E",当我搜索这个数组时,它应该给我"E"的位置,所以我应该得到索引位置4。我不想用循环来实现,请问有没有可能?我已经查遍了各种资料,但是找不到答案。
我不想在循环中执行这个操作。
必须有一个循环在某个地方——无论是在你的代码中还是库代码中。
所以,是的,你可以使用
int index = Arrays.asList(arrKey).indexOf("E");
...但这将在内部进行循环。
如果您知道您的数组一开始就是排序的,您可以使用:
int index = Arrays.binarySearch(arrKey, "E");
那样会更高效 - 但仍然需要循环...
当然,如果你知道你的数组始终是A-Z,那么你可以在不使用循环的情况下完成它 - 但我假设你的实际情况更为通用化...
int index = Arrays.asList(arrKey).indexOf("E");
无论我使用哪个字母,我都会得到-1作为答案。当我尝试使用以下代码时:int index = Arrays.binarySearch(arrKey, "E");
我得到了这个错误:Exception in thread "main" java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.String我猜测这与数组的类型有关? - DinoString c = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
然后 char[] arrKey = c.toCharArray();
,你的代码 int index = Arrays.binarySearch(arrKey, "E");
对我很有用。我不确定它是如何工作的,但从你所说的来看,它会循环?我只是好奇,因为我正在学习JAVA,当你看这行代码时,没有循环,只有一行代码,所以我推断JAVA(在后台)会为该语句执行自己的循环!是这样吗? - DinoString[]
)。如果你使用'E'
而不是"E"
,你的代码应该可以工作。是的,所有这些都循环。但是如果你真的有A...Z,你可以只使用'E' - 'A'
... 如果你能准确地告诉我们你想要实现什么,那会非常有帮助。 - Jon Skeet这基本上是一道面试题,用于测试您的递归技巧,以下是如何实现。
private static <T> int findIndex(T[] items, T item, int index) {
if (items.length == index) {
return -1;
}
if (items[index].equals(item)) {
return index;
}
return findIndex(items, item, index+1);
}
int val = findIndex(new String[]{"A","B","C"}, "C", 0);
如果你需要处理 char
而不是字符串,请查看 getNumericValue 方法。
如果你想要一个更通用的解决方案,你应该考虑使用 Map<String,Integer>
而不是数组。
return arrKey.get(arrKey.indexOf("E"));
这是我正在处理的代码。目前这就是我的成果。这只是一个练习,让我练习JAVA并理解凯撒密码。
public class CeaserCipher
{
public static void main (String [] args) {
Scanner keyboard = new Scanner(System.in);
System.out.println("Enter test letters for Caesar cipher in capitals");
String input = keyboard.nextLine();
char[] strArray = input.toCharArray();
System.out.print("What is the key: ");
int key = keyboard.nextInt();
//String[] arrKey = new String[] {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
String c = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char[] arrKey = c.toCharArray();
for (int i = 0; i < strArray.length ; i++){
char cipherValue = strArray[i];
int index = Arrays.binarySearch(arrKey, cipherValue);
int j = (key + index)%26;
System.out.print(arrKey[j]);
}
}
}
char
而不是 String
吗? - Jon Skeetchar []
中查找'E'
,或在String []
中查找"E"
。 - Jon Skeetlet arr = ["A","B","C","D","E","Y","Z"];
let index = 0;
function find(str){
if(str[0] === "E")
{
return str[0];
}
else {
str.shift();
index++;
return find(str);
}
}
console.log("Found",find(arr));
console.log("at Index:",index);
console.log("Peace Out! XD");
只有在假设您拥有此数组(或类似的数组)并且可以计算索引时,才可能实现。
String s = "E";
int index = s.charAt(0) - 'E'; // == 4