Java 小程序-我如何使这段代码使用字符串而不是字符?

Java 小程序-我如何使这段代码使用字符串而不是字符?,java,arrays,string,char,Java,Arrays,String,Char,我正在慢慢地编写一个程序,将十六进制数转换成十进制数。我对阅读已完成的、众所周知的代码不感兴趣,因为我想自己做。我有个主意,但有什么事妨碍了我 import java.util.Scanner; public class Test{ public static void main(String[] args){ Scanner input = new Scanner(System.in); String any = input.nextLine();

我正在慢慢地编写一个程序,将十六进制数转换成十进制数。我对阅读已完成的、众所周知的代码不感兴趣,因为我想自己做。我有个主意,但有什么事妨碍了我

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

问题是我想用
10
替换
a
10
不再是字符,因为它由两个字母组成。这就是为什么我想知道如何使此代码使用
字符串
而不是
字符

而不是替换
cArray
中的值,我将创建一个StringBuilder,并将所有值附加到该字符串中(因为您可能只想打印结果):-

StringBuilder str=new StringBuilder();
对于(int i=0;i提示

'a' - 87 = 10
因此,您可以使用:

(int) cArray[i] - 87
因为:

(int)'a' = 97

希望您能理解。

我猜您会希望在提取转换后的十进制数字后访问它们。使用字符串列表存储您的输出

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);
    }
Scanner-in=新的扫描仪(System.in);
字符串any=in.nextLine();
char[]cArray=any.toCharArray();
列表输出=新的ArrayList();
对于(inti=0;i=a'){//Strore a,b,c,d,e
output.add(String.valueOf(10+(cArray[i]-'a'));
}else{//存储编号
output.add(String.valueOf(cArray[i]);
}
}
for(字符串s:输出){
系统输出打印项次;
}

让我们看看这个:

  if (cArray[i] == 'a') {
      cArray[i] = '10'; 
  }
这是无效的Java,原因如下:

  • '10'
    不是有效的文本。它不是字符文本,因为有两个字符…而字符文本只能表示单个字符。它也不是字符串文本,因为字符串文本用双引号括起来;例如
    “10”

  • 假设我们将
    '10'
    更改为
    “10”
    ,这仍然是错误的。现在的问题是
    cArray[i]=“10”
    正在将字符串对象分配到字符数组中

  • 下一个问题是无法“插入”到数组中。数组的大小是固定的。数组的大小不能更改(除非创建新数组)。只能在给定位置更新字符

    但这在这里也不起作用。您可以尝试将字符向右移动,以便为额外的字符留出空间。但是,数组中没有足够的空间容纳所有字符


    简而言之,您需要将修改/重写的字符表示为新的数据结构。
    StringBuilder
    类是最合适的。有关使用
    StringBuilder
    的解决方案,请参阅@SteveSmith的答案,以使您的代码使用字符串而不是字符将字符数组更改为字符串数组:

            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]+" ");
            }
    
    扫描仪输入=新扫描仪(System.in);
    字符串any=input.nextLine();
    //char[]cArray=any.toCharArray();//首先更改此行
    String[]cArray=any.split(“”;//将输入拆分为单个字符作为字符串
    
    对于(int i=0;i简单有效)。
      if (cArray[i] == 'a') {
          cArray[i] = '10'; 
      }
    
            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]+" ");
            }