gpt4 book ai didi

java - String.charAt() 在 java 中返回奇怪的结果

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:05:38 25 4
gpt4 key购买 nike

我有以下代码

String[] alphabet = 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 str = "aa";
for(int i=0;i<str.length();i++) {
chars.add(Arrays.asList(alphabet).indexOf(str.charAt(i)));
}

chars中的值是

0 = -1
1 = -1

因为 Arrays.asList(alphabet).indexOf(str.charAt(i)) 返回的结果是 'a'97 而不是 "a"因此它不匹配,因为返回 -1

我需要 Arrays.asList(alphabet).indexOf(str.charAt(i)) 来返回“a”这就是我认为 charAt 返回的只是“a”而不是这个“a”97

还有其他选择吗?

最佳答案

str.charAt(i) 返回一个 char 并且 List 包含 String 元素。
因为 char 不是 String 并且 String.equals()Character.equals() 不可互操作在它们之间("a".equals('a')Character.valueOf('a').equals("a") 返回 false), stringList.indexOf(anyChar) 将始终返回 -1

你可以替换:

chars.add(Arrays.asList(alphabet).indexOf(str.charAt(i)));
^----- List<String> ^----- char (that will be boxed to Character)

作者:

chars.add(Arrays.asList(alphabet).indexOf(String.valueOf(str.charAt(i))));
^----- List<String> ^----- String

StringString 进行比较。

或者通过依赖 char[] 而不是 String[]charchar 进行比较如:

char[] alphabet = new char[] { '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'};

这样编译会很好:

List<Character> charList = IntStream.range(0, alphabet.length)
.mapToObj(i -> alphabet[i])
.collect(Collectors.toList());
chars.add(charList.indexOf(str.charAt(i)));
^------- List<Character> ^------ char (that will be boxed to Character)

这不是您的直接问题,但在每次迭代时创建相同的 List 是不合逻辑的,而且有点浪费。
在循环之前实例化它一次更有效:

List<String> alphabetList = Arrays.asList(alphabet);
String str = "aa";
for(int i=0;i<str.length();i++) {
chars.add(alphabetList.indexOf(String.valueOf(str.charAt(i))));
}

关于java - String.charAt() 在 java 中返回奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52084494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com