我正在慢慢地尝试编写一个将十六进制数转换为十进制数的程序。我对阅读完成的,众所周知的代码不感兴趣,因为我想自己做。我有一个想法,但有些东西干扰了我。
import java.util.Scanner;
public class Test{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String any = input.nextLine();
char[] cArray = any.toCharArray();
for(int i=0; i<cArray.length; i++){
System.out.print(cArray[i]+" ");
}
}
}
Input: ab12
Output: a b 1 2
我希望将a
替换为10
,将b
替换为11
,将c
替换为12
,等等。
如果我在for循环中添加if语句,它会起作用。
for(int i=0; i<cArray.length; i++){
if(cArray[i] == 'a'){
cArray[i] = '10'; // doesn't work, read below
}
System.out.print(cArray[i]+" ");
}
问题是我想用a
替换10
而10
不再是一个字符,因为它由两个字母组成。这就是为什么我想知道如何使用strings
代替characters
来使用此代码?
答案 0 :(得分:5)
我没有替换cArray
中的值,而是创建一个StringBuilder,并将所有值追加到那里(因为大概你只想打印出结果): -
StringBuilder str = new StringBuilder();
for(int i=0; i<cArray.length; i++){
if(cArray[i] == 'a'){
str.append(10);
} else if (cArray[i] == 'b'){
[etc]
} else {
str.append(cArray[i]);
}
}
System.out.print(str.toString());
答案 1 :(得分:5)
<强>提示强>
'a' - 87 = 10
所以你可以使用:
(int) cArray[i] - 87
因为:
(int)'a' = 97
希望你明白这一点。
答案 2 :(得分:1)
我猜你在提取它们之后想要访问转换后的十进制数字。使用String列表来存储输出
Scanner in = new Scanner(System.in);
String any = in.nextLine();
char[] cArray = any.toCharArray();
List<String> output = new ArrayList<String>();
for(int i=0; i<cArray.length; i++){
if(cArray[i] >= 'a'){ // Strore a,b,c,d,e
output.add(String.valueOf(10+(cArray[i]-'a')));
} else { // Store numbers
output.add(String.valueOf(cArray[i]));
}
}
for(String s : output){
System.out.println(s);
}
答案 3 :(得分:1)
我们来看看这个:
if (cArray[i] == 'a') {
cArray[i] = '10';
}
由于以下几个原因,这不是有效的Java:
'10'
不是有效的文字。它不是字符文字,因为有两个字符......字符文字只能代表一个字符。它也不是String文字,因为String文字用双引号字符括起来;例如"10"
。
假设我们将'10'
更改为"10"
......这仍然是错误的。现在的问题是cArray[i] = "10";
正在将String对象分配给一个字符数组。
下一个问题是您无法“插入”数组。数组具有固定的大小。数组的大小不能更改(除非您创建一个新数组)。您所能做的就是更新给定位置的角色。
但这在这里也行不通。您可以尝试向右移动字符以为额外字符腾出空间。但是,在数组中没有足够的空间来容纳所有字符。
简而言之,您需要将修改/重写的字符表示为 new 数据结构。 StringBuilder
类是最合适的。请参阅@ SteveSmith关于使用StringBuilder
的解决方案的答案。
答案 4 :(得分:1)
要使代码使用字符串而不是字符,请将char数组更改为字符串数组:
Scanner input = new Scanner(System.in);
String any = input.nextLine();
//char[] cArray = any.toCharArray(); // first change this line
String [] cArray = any.split(""); // split input into single characters as string
for(int i=0; i<cArray.length; i++){
System.out.print(cArray[i]+" ");
}
for(int i=0; i<cArray.length; i++){
if(cArray[i].equals("a")){ // use String.equals("anotherString") method to check equality
cArray[i] = "10";
}
System.out.print(cArray[i]+" ");
}