第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

String.charAt() 在 java 中返回奇怪的結(jié)果

String.charAt() 在 java 中返回奇怪的結(jié)果

一只萌萌小番薯 2021-08-19 20:01:56
我有以下代碼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))); }字符中的值是0 = -11 = -1 由于 Arrays.asList(alphabet).indexOf(str.charAt(i)) 返回的結(jié)果是 'a'97 而不是“a”,因此它不匹配,因為返回 -1我需要Arrays.asList(alphabet).indexOf(str.charAt(i)) 返回 "a" 這就是我認為charAt返回的只是 "a" 而不是這個 'a' 97任何選擇?
查看完整描述

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))));

}


查看完整回答
反對 回復 2021-08-19
?
隔江千里

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', /* ... */ };


查看完整回答
反對 回復 2021-08-19
?
慕的地8271018

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))


查看完整回答
反對 回復 2021-08-19
  • 3 回答
  • 0 關注
  • 360 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號