Dae*_*ric 4 java arrays indexof
所以我试图创建一个方法,你发送一个简单的字符串,然后在for循环中由char分解char,数组"alpha"中的每个char转换为"beta"中的等效值,它们是然后所有连接使用StringBuilder并作为"输出"发回,如下所示:
代码: 我简化了整个类和所有变量名称以提高可读性.
import java.util.Arrays;
public class Test {
private final char[] alpha = { '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'};
public String getAlpha(String input) {
StringBuilder output = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
int index;
if (Character.isLetter(c)) {
try {
index = Arrays.asList(alpha).indexOf(Character.toUpperCase(c));
System.out.println(c); //debug
System.out.println(index); //debug
//output.append(beta[index]); //gets the index and applies it to beta (unnecessary for this example)
} catch(ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
} else {
output.append(c);
}
}
return output.toString();
}
public static void main(String[] args) {
Test test1 = new Test();
test1.getAlpha("Hello");
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我的每个char的索引始终导致ArrayIndexOutOfBounds异常,因为indexOf无法在数组"alpha"中找到等效的字符.
难道我做错了什么?显而易见,但我无法理解为什么/为什么它没有得到任何char的任何索引.任何帮助将不胜感激.
输入:
"Hello"
Run Code Online (Sandbox Code Playgroud)
输出: debug
H
-1
e
-1
l
-1
l
-1
o
-1
Run Code Online (Sandbox Code Playgroud)
Joh*_*ica 13
char[] alpha = {...};
index = Arrays.asList(alpha).indexOf(Character.toUpperCase(c));
Run Code Online (Sandbox Code Playgroud)
问题很微妙.Arrays.asList(T...)期待一个数组在T哪里T extends Object.如果传递一组基元,它就不会像你期望的那样工作.在这种情况下,它会思考T = char[]并返回List<char[]>包含单个元素的内容alpha.
A List<char[]>包含char数组,而不是字符,因此indexOf调用始终返回-1.
您可能想知道为什么不会出现编译时错误.如果它被调用,不应该indexOf期望传递char[]参考List<char[]>?好吧,令人惊讶的是,没有.它indexOf的签名是int indexOf(Object):它接受任何类型的对象,甚至是与之无关的对象T.
你可以用Arrays.binarySearch.这可以工作,因为您的数组已排序.或者您可以使用String而不是char[]数组.
如果角色在范围内,另一种方法是做一些简单的数学运算.
char uc = Character.toUpperCase(c);
if (uc >= 'A' && uc <= 'Z') {
index = uc - 'A';
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1382 次 |
| 最近记录: |