3 回答

TA貢獻2065條經(jīng)驗 獲得超14個贊
str.charAt(i)返回 achar 和ListcontainsString元素。
作為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)
經(jīng)過 :
chars.add(Arrays.asList(alphabet).indexOf(String.valueOf(str.charAt(i))));
^----- List<String> ^----- String
比較String有String。
或作為替代方案比較char與char依靠char[],而不是String[]如:
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在每次迭代中創(chuàng)建相同的問題是不合邏輯的,而且有點浪費。
在循環(huán)之前實例化一次更有效:
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))));
}

TA貢獻1906條經(jīng)驗 獲得超10個贊
需要注意的是,字符和字符串在 Java 中不是一回事。Achar
是一個原始的數(shù)字類型,它的文字使用單引號(例如'a'
)給出。字符串是邏輯上由多個字符組成的引用類型。
最簡單的解決方案是使您的字母表成為單個字符串:
String alphabet = "abcdef...";
并在查找索引時掃描該字符串:
chars.add(alphabet.indexOf(str.charAt(i)));
請注意,這現(xiàn)在使用String.indexOf
而不是List
您之前使用的indexOf 方法。
或者,轉(zhuǎn)換alphabet
為字符數(shù)組:
char[] alphabet = new char[] {'a', 'b', /* ... */ };

TA貢獻1796條經(jīng)驗 獲得超4個贊
Arrays.asList(alphabet)
是一個List<String>
。它不包含任何類型Character
。
如果要查找由該單個字符組成的字符串,請構建該單個字符的字符串:
Arrays.asList(alphabet).indexOf(Character.toString(str.charAt(i)))
要么
Arrays.asList(alphabet).indexOf(str.substring(i, i+1))
添加回答
舉報