小程序 - 如何使用字符串而不是字符来使用此代码?

时间:2017-04-10 13:08:15

标签: 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();
        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替换1010不再是一个字符,因为它由两个字母组成。这就是为什么我想知道如何使用strings代替characters来使用此代码?

5 个答案:

答案 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:

  1. '10'不是有效的文字。它不是字符文字,因为有两个字符......字符文字只能代表一个字符。它也不是String文字,因为String文字用双引号字符括起来;例如"10"

  2. 假设我们将'10'更改为"10" ......这仍然是错误的。现在的问题是cArray[i] = "10";正在将String对象分配给一个字符数组。

  3. 下一个问题是您无法“插入”数组。数组具有固定的大小。数组的大小不能更改(除非您创建一个新数组)。您所能做的就是更新给定位置的角色。

    但这在这里也行不通。您可以尝试向右移动字符以为额外字符腾出空间。但是,在数组中没有足够的空间来容纳所有字符。

    简而言之,您需要将修改/重写的字符表示为 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]+" ");
        }