2014-10-09 185 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é");