【问题标题】:Little program - how can I make this code work with a string instead of character?小程序 - 我怎样才能让这段代码使用字符串而不是字符?
【发布时间】:2017-09-05 13:10:27
【问题描述】:

我正在慢慢尝试编写一个将十六进制数转换为十进制数的程序。我对阅读已完成的、众所周知的代码不感兴趣,因为我想自己做。我有一个想法,但有一些东西干扰了我。

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,用11替换b,用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]+" ");
        }

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

【问题讨论】:

    标签: java arrays string char


    【解决方案1】:

    我不会替换 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());
    

    【讨论】:

    • 简单有效的史蒂夫。
    【解决方案2】:

    提示

    'a' - 87 = 10
    

    所以你可以使用:

    (int) cArray[i] - 87
    

    因为:

    (int)'a' = 97
    

    希望你能明白。

    【讨论】:

      【解决方案3】:

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

      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);
          }
      

      【讨论】:

        【解决方案4】:

        让我们看看这个:

          if (cArray[i] == 'a') {
              cArray[i] = '10'; 
          }
        

        这不是有效的 Java 有几个原因:

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

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

        下一个问题是您不能“插入”到数组中。数组有固定的大小。数组的大小不能改变(除非你创建一个新数组)。您所能做的就是在给定位置更新角色。

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

        简而言之,您需要将修改/重写的字符表示为 new 数据结构。 StringBuilder 类是最合适的。使用StringBuilder 的解决方案请参阅@SteveSmith 的答案。

        【讨论】:

          【解决方案5】:

          要使您的代码使用字符串而不是字符,请将 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]+" ");
                  }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-02-03
            • 1970-01-01
            • 1970-01-01
            • 2012-10-12
            • 2021-06-07
            • 2016-05-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多