我需要任何给定字符串的八进制值,因为我在代码下面使用它。
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方法或分类器?
答案 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)
答案 2 :(得分:0)
我说,将它们分成字符,将字符转换为整数,然后创建一个八进制字符串。像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));
}
您正在使用字符作为循环的数据类型。虽然这确实有效,但它不是用于索引循环的正确数据类型。当您在字符串的长度上编写循环时,您使用的是整数。循环中的整数表示index
。实际上,在这种情况下,索引引用String中的一个字符,但在这种情况下它只是成立。当我阅读该代码时,我希望您对在循环中创建的character
做一些事情。不只是将它用作String
的索引。
答案 3 :(得分:0)
你仍然需要你的循环,但strip
将完成你的地图所做的事情。