字符串的八进制值

octal value of String

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

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 方法或排序器可用于此目的?

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

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

03 使值至少有 3 个字符长,左手带零。

使用 Integer.toOctalString(int)

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

因此在您的示例中,如果您有一个字符串,您可以对字符串中的每个字符执行此操作。您不必为此明确投射。 (请记住,一个字符可以表示为一个整数,但我们自己不这样做)

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

还有第二个'mistake'

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

您仍然需要您的循环,但 Integer.toOctalString() 将完成您的地图所做的工作。

尝试对每个字符应用 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 可能不够(对于 1,您会得到像 061100226 用于 等)。

示例:

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

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