2
class Test{

    public static void main(String Args[]){

        Integer x;
        x = Integer.decode("0b111");
        System.out.println(x);
    }
}

这不适用于二进制的前缀 0 和前缀为 0 的八进制。正确的方法是什么?

4

3 回答 3

5

查看 的文档Integer.decode,我没有看到二进制文件应该工作的迹象。八进制应该可以工作,前缀只有 0:

System.out.println(Integer.decode("010")); // Prints 8

您可以像这样处理“0b”的二进制指标:

int value = text.toLowerCase().startsWith("0b") ? Integer.parseInt(text.substring(2), 2)
                                  : Integer.decode(text);

显示 15 的二进制、八进制、十进制和十六进制表示的完整示例代码:

public class Test {
    public static void main(String[] args) throws Exception {
        String[] strings = { "0b1111", "017", "15", "0xf" };
        for (String string : strings) {
            System.out.println(decode(string)); // 15 every time
        }
    }

    private static int decode(String text) {
        return text.toLowerCase().startsWith("0b") ? Integer.parseInt(text.substring(2), 2)
                                     : Integer.decode(text);
    }

}
于 2012-11-25T09:01:22.073 回答
0

Integer.decode 无法解析二进制,请参阅 API。但八进制工作正常,例如:

int i = Integer.decode("011");
于 2012-11-25T09:05:57.403 回答
0

从 Java 7 开始,您可以直接在代码中使用二进制文字。但是,请注意,这些类型是 、byte或(而不是)。shortintlong String

int x = 0b111;
于 2012-11-25T09:20:34.637 回答