2014-10-09 184 views
0

繼承人我的代碼接受一個字符串,並按順序返回數組中每個字符的ascii值數組。編譯錯誤是「必需的數組,但java.lang.String中發現」解析字符串並返回數組

public class Q1E { 
    int[] stringToCodes(String characters){ 
     int characterLength= length(characters); 
     int[] array=new int[characterLength]; 
     for(int i=0;i<characterLength;i++) { 
      array[i] =(int) characters[i]; 
     } 
    } 
} 
+2

你忘了你的方法的最後返回'array'。 – 2014-10-09 04:35:57

+0

改變'length(characters);'用'characters.length();'否則你的代碼甚至不會編譯。 – Rustam 2014-10-09 04:44:18

回答

1

你不能在一個字符串中使用數組語法,使用character.charAt(i)代替。另外,你需要在最後返回數組。

0

您的代碼似乎有一些錯誤,它是String#length(),我建議您添加一個null檢查。最後(因爲characters不是數組),我想你想使用String#charAt(int)

int[] stringToCodes(String characters) { 
    int characterLength = 0; 
    if (characters != null) { 
     characterLength = characters.length(); 
    } 
    int[] array = new int[characterLength]; 
    for (int i = 0; i < characterLength; i++) { 
     array[i] = characters.charAt(i); 
    } 
    return array; 
} 

當然,你可以用三元

int characterLength = (characters != null) ? characters.length() : 0; 
int[] array = new int[characterLength]; 
0

縮短試試這個:

public class Test { 


public static void main(String[] args) { 

    int []ascii=stringToCodes("abcdef"); 
    for(int i=0;i<ascii.length;i++){ 
     System.out.println(ascii[i]); 
    } 

} 
    public static int [] stringToCodes(String characters){ 
    int []ascii=new int[characters.length()]; 

    for(int i=0;i<characters.length();i++){ 
     ascii[i]=(int)characters.charAt(i); 
    } 
return ascii; 
} 

}

0

Java對字符串使用Unicode/UTF-16,而不是ASCII。

如果要限制您的方法來處理ASCII範圍內的字符,它應該在遇到該範圍之外的情況下引發異常。

如果你想要一個「字符代碼」(aka碼點)的序列,你必須在方法中使用String.codePointAt()。由於String包含一個統計的UTF-16代碼單元序列,並且每個代碼點可能有一個或兩個代碼單元,因此您只知道String.length()是預先提供的代碼點數的上限。

public class Q1E { 
    int[] stringToCodes(String s) { 
    int[] codepoints = new int[s.length()]; // there might be fewer 
    int count = 0; 
    for(int cp, i = 0; i < s.length(); i += Character.charCount(cp)) { 
     cp = s.codePointAt(i); 
     // for debugging, output in Unicode stylized format 
     System.out.println(String.format(
      cp < 0x10000 ? "U+%04X" : "U+%05X", cp)); 
     codepoints[count++] = cp; 
    } 
    int[] array = java.util.Arrays.copyOf(codepoints, count); 
    return array; 
    } 
} 

與一個英文單詞本維基百科的鏈接嘗試:

stringToCodes("http://en.wikipedia.org/wiki/Résumé");