0

下面是我的简单程序,它将字符串转换为数组元素,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"; 它工作正常..!

4

8 回答 8

4

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

System.out.println(Character.getNumericValue(c));
于 2013-03-20T13:03:54.593 回答
4

那是因为一个字符的值与int用来表示它的值不同。声明puzchar[]应该解决问题并按预期打印数字。

于 2013-03-20T13:05:13.573 回答
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);

    }
于 2013-03-20T13:05:03.200 回答
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);

        }
    }
于 2013-03-20T13:05:09.003 回答
1

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

于 2013-03-20T13:05:20.943 回答
0

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

您不能将 achar放入int. 否则它将返回其unicode值。

返回的值Real output: 49 50 51 52 53是 unicode ASCII 字符代码

这将解决您的问题:

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));
            }
        }
    }
于 2013-03-20T13:24:40.313 回答
0

您隐式转换charintchar '1' 不等于 1,您可以将它们转换为 char,如下所示:

 System.out.println((char)c);
于 2013-03-20T13:08:16.443 回答
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 循环和一个数组。

于 2013-03-20T13:11:19.040 回答