charAt(i)没有给出对数组的期望行为

时间:2013-03-20 13:02:42

标签: java

下面是我的简单程序,它将字符串转换为数组元素,charAt(i)根据文档没有返回它应该的内容。我的代码是

public class StringToArray {

    public static void main(String[] args){
        String test = "12345";
        fromPuzzleString(test);
    }

    public static void fromPuzzleString(String puzzle) {
        int puz[] = new int[puzzle.length()];
        for (int i = 0; i < puzzle.length(); i++) {
            puz[i] = puzzle.charAt(i);
        }
        for (int c : puz) {
            System.out.println(c);

        }
    }
}

预期输出:1 2 3 4 5

实际输出:49 50 51 52 53

但是当我使用puz [i] = puzzle.charAt(i) - “O”时;  它工作正常......!

8 个答案:

答案 0 :(得分:4)

您正在显示角色的unicode点值。相反,你可以使用

System.out.println(Character.getNumericValue(c));

答案 1 :(得分:4)

这是因为角色的值与用于表示它的int不同。将puz声明为char[]可以解决问题并按预期打印数字。

答案 2 :(得分:2)

    char puz[] = new char[puzzle.length()];
    for (int i = 0; i < puzzle.length(); i++) {
        puz[i] = puzzle.charAt(i);
    }
    for (char c : puz) {
        System.out.println(c);

    }

答案 3 :(得分:2)

正常。

你取字符串“1”而不是数字1。 要获取数字,请使用Integer.paserInt(yourString); 然后你会得到你的号码。

例如:

    public static void main(String[] args){
        String test = "12345";
        fromPuzzleString(test);
    }

    public static void fromPuzzleString(String puzzle) {
        int puz[] = new int[puzzle.length()];
        for (int i = 0; i < puzzle.length(); i++) {
            puz[i] = Integer.parseInt(puzzle.charAt(i));
        }
        for (int c : puz) {
            System.out.println(c);

        }
    }

答案 4 :(得分:1)

您正在将您获取的char转换为int,因此Java将打印其整数表示。将结果存储为字符串数组,并循环遍历该数组以进行打印。

答案 5 :(得分:0)

你隐式地将char转换为int,char'1'不等于1,你可以将它们转换为char:

 System.out.println((char)c);

答案 6 :(得分:0)

您正在使用int数组,因此它会打印ascii值。您可以执行以下操作:

public static void fromPuzzleString(String puzzle) {    
    for (int i = 0; i < puzzle.length(); i++) {
        System.out.println( puzzle.charAt(i));
    }
}

您无需不必使用2 for循环和数组。

答案 7 :(得分:0)

"charAt(i) is not returning what it is supposed to according to documentation"

您无法将char放入int。否则它将返回 unicode 值。

返回的值Real output: 49 50 51 52 53是unicode ASCII Characters codes

这将解决您的问题:

public class StringToArray {

        public static void main(String[] args){
            String test = "12345";
            fromPuzzleString(test);
        }

        public static void fromPuzzleString(String puzzle) {
            char[] puz = new char[puzzle.length()];
            for (int i = 0; i < puzzle.length(); i++) {
                puz[i] = puzzle.charAt(i);
            }
            for (char c : puz) {
                System.out.println(c);

            }
        }
    }

但是,为了节省内存,我建议你不要声明一个数组,立即显示这些值:

public class StringToArray {

        public static void main(String[] args){
            String test = "12345";
            fromPuzzleString(test);
        }

        public static void fromPuzzleString(String puzzle) {
           for (int i = 0; i < puzzle.length(); i++) {
                System.out.println(puzzle.charAt(i));
            }
        }
    }