String的八进制值

时间:2016-08-03 14:32:36

标签: java string octal

我需要任何给定字符串的八进制值,因为我在代码下面使用它。

public static void main(String[] args) {

        HashMap<Character, String> octalValues = new HashMap<Character, String>();
        octalValues.put('*', "052");
        octalValues.put('1', "061");
        octalValues.put('2', "062");
        octalValues.put('3', "063");
        octalValues.put('a', "141");
        octalValues.put('b', "142");
        octalValues.put('c', "143");
        octalValues.put('d', "144");

        String value = "123abc*";

        for (char i = 0; i < value.length(); i++) {
            System.out.print(octalValues.get(value.charAt(i)) + " ");
        }

输出:061 062 063 141 142 143 052

是否有可用于此的预定义Java方法或分类器?

4 个答案:

答案 0 :(得分:3)

尝试将Integer#toOctalString()应用于每个角色。

示例:

System.out.println( 
     "123abc*".chars()
              .mapToObj( Integer::toOctalString )
              .collect( Collectors.toList() ) );

输出:[61, 62, 63, 141, 142, 143, 52]

修改

如果你想获得前导零,你可以使用String.format( "%03o", c )作为Andy Turner的建议(只是为了完整性而重复此处)。但请注意,对于像中文字符这样的unicode字符,字符代码点可能会更高,因此长度为3可能不够(您为061获取1之类的字符串,并且100226。)。

示例:

System.out.println( 
      "123abc*".chars()
               .mapToObj( c -> String.format( "%03o", c ) )   
               .collect( Collectors.toList() ) );

输出:[061, 062, 063, 141, 142, 143, 052]

答案 1 :(得分:1)

o format specifier表示应该以八进制格式化整数值。例如:

System.out.printf("%03o", intValue);

03使值至少为3个字符,左手为零。

答案 2 :(得分:0)

使用Integer.toOctalString(int)

我说,将它们分成字符,将字符转换为整数,然后创建一个八进制字符串。像Integer.toOctalString((int) 'c')一样。首先将您的角色变为Integer,然后创建角色八进制值的String表示。

因此,在您的示例中,如果您有一个String,则可以对字符串中的每个字符执行此操作。你不必为此明确地演员。 (请记住,一个字符可以表示为一个整数,但我们在这里不是这样做的)

 String s = "Hello World";
 for(int i = 0; i < s.length(); i++){
    String octalString = Integer.toOctalString(s.charAt(i));
 }

第二个错误&#39;

您正在使用字符作为循环的数据类型。虽然这确实有效,但它不是用于索引循环的正确数据类型。当您在字符串的长度上编写循环时,您使用的是整数。循环中的整数表示index。实际上,在这种情况下,索引引用String中的一个字符,但在这种情况下它只是成立。当我阅读该代码时,我希望您对在循环中创建的character做一些事情。不只是将它用作String的索引。

答案 3 :(得分:0)

你仍然需要你的循环,但strip将完成你的地图所做的事情。