所以我试图创建一个方法,你发送一个简单的字符串,然后在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");
}
}
我遇到的问题是我的每个char的索引始终导致ArrayIndexOutOfBounds异常,因为indexOf无法在数组“alpha”中找到等效的字符。
我做错了吗?显而易见,但我无法理解为什么/为什么它没有为任何char获取任何索引。任何帮助将不胜感激。
输入:
"Hello"
输出: 调试
H
-1
e
-1
l
-1
l
-1
o
-1
答案 0 :(得分:13)
tableList = [[UITableView alloc] initWithFrame:self.bounds style:UITableViewStylePlain];
问题很微妙。 char[] alpha = {...};
index = Arrays.asList(alpha).indexOf(Character.toUpperCase(c));
需要一个Arrays.asList(T...)
数组T
。如果你传递一组基元,它就不会像你一样工作。在这种情况下,它会认为T extends Object
并返回包含单个元素T = char[]
的{{1}}。
List<char[]>
包含字符数组,而不是字符,因此alpha
调用始终返回List<char[]>
。
你可能想知道为什么你没有得到编译时错误。如果在indexOf
上调用-1
,那么indexOf
期待char[]
引用是否应该被传递?好吧,令人惊讶的是,没有。 List<char[]>
的签名是indexOf
:它接受任何类型的对象,甚至是与int indexOf(Object)
无关的对象。
您可以使用Arrays.binarySearch
。这可以工作,因为您的数组已排序。或者您可以使用T
代替String
数组。
如果角色在范围内,另一种方法是做一些简单的数学运算。
char[]
答案 1 :(得分:2)
这是你想要做的吗?
您可以通过利用char
值映射到ASCII int值的事实完全避免OutOfBounds(或线性/二进制搜索),并且您可以简单地对它们进行数学运算以获取字符位置。
输出
H
8
e
5
l
12
l
12
o
15
private final String alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public String getAlpha(String input) {
StringBuilder output = new StringBuilder();
for (int i = 0; i < input.length(); i++) {
char c = input.charAt(i);
if (Character.isLetter(c)) {
int index = Character.toUpperCase(c) - 'A' + 1;
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)
} else {
output.append(c);
}
}
return output.toString();
}
答案 2 :(得分:0)
indexOf()正在对对象进行比较。 Character.toUpperCase()返回一个Character,但是数组中的每个项都是char,所以没有匹配。
如果将char []更改为Character [],您将获得所期望的行为。
答案 3 :(得分:-1)
试试这个: index = new String(alpha).indexOf(Character.toUpperCase(c));