字符串的八进制值
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
,您会得到像 061
和 100226
用于 肖
等)。
示例:
System.out.println(
"123abc*".chars()
.mapToObj( c -> String.format( "%03o", c ) )
.collect( Collectors.toList() ) );
输出:[061, 062, 063, 141, 142, 143, 052]
我需要任何给定字符串的八进制值,因为我正在使用下面的代码。
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
,您会得到像 061
和 100226
用于 肖
等)。
示例:
System.out.println(
"123abc*".chars()
.mapToObj( c -> String.format( "%03o", c ) )
.collect( Collectors.toList() ) );
输出:[061, 062, 063, 141, 142, 143, 052]