【问题标题】:java transform value of char 2D array (letter) into integer (number)java将char 2D数组(字母)的值转换为整数(数字)
【发布时间】:2014-04-22 21:58:25
【问题描述】:

我很困惑如何将二维字符数组中的值转换为数字(整数)。

假设数组是:[[a, b],[c, d],[e, f]]{{'a','b'},{'c','d'},{'e','f'}}

该数组中的所有值都将转换为数字,a=0, b=1, c=2, d=3, e=4, f=5。

我希望得到如下结果:[[0, 1], [2, 3], [4, 5]]{{0, 1},{2, 3},{4, 5}}

如果它只是一个“abcdef”字符串,我可以使用charAt(),但我不能在数组中使用它,尤其是在char数组中。所以,我使用 .replace。

package array_learning;

public class test {     
    public static void main(String[] args){
        char [][] word= {{'a','b'},{'c','d'},{'e','f'}};  
        int strLength = word.length; 
        for(int i = 0; i<strLength; i++){
            for(int j=0; j<2; j++){
                String strWord = Character.toString(word[i][j]);
                strWord = strWord.replace("a","0");
                strWord = strWord.replace("b","1");
                strWord = strWord.replace("c","2");
                strWord = strWord.replace("d","3");
                strWord = strWord.replace("e","4");
                strWord = strWord.replace("f","5"); 
                System.out.print(strWord+" ");
            } 
            System.out.println();
        }     

    }
}

但是,结果不是我所期望的。

结果:

0 1 

2 3 

4 5 

如何以正确的方式解决这个问题?

【问题讨论】:

  • [[a, b],[c, d],[e, f]] 是什么意思?这不是有效的 Java 语法。
  • 您发布的预期结果和实际结果似乎一致。您的问题只是它们的打印格式吗?
  • 无需将它们转换为字符串或使用replace。此外,您说您正在将它们转换为“数字(整数)”,但您只是将它们更改为不同的数字字符。我希望你能理解其中的区别。
  • @femtoRgon。是的。问题是如何在不改变值格式的情况下将字母转换为数字。所以,结果也应该是二维数组。我该怎么做?
  • @ErwinBolwidt,我认为当我们使用 Arrays.deepToString() 时它是有效的。 (如果我错了,请纠正我..)

标签: java multidimensional-array char


【解决方案1】:

考虑:

import java.util.Arrays;   

public class Ctest {
    public static void main(String[] args) {
        char[][] word= { {'a', 'b'}, {'c', 'd'}, {'e', 'f'} };

        println(word); // format with brackets e.g., [[a, b], [c, d]]
        System.out.println(Arrays.deepToString(word)); // same format

        for (int i = 0; i < word.length; i++) {
            for (int j = 0; j < word[i].length; j++) {
                if (word[i][j] >= 'a' && word[i][j] <= 'f') {
                    word[i][j] = (char) ((word[i][j] - 'a') + '0');
                }
            }
        }

        println(word); // formatted with brackets
        printPlain(word); // formatted without brackets
    }

    public static void println(char[][] word) {
        System.out.print("[");
        for (int i = 0; i < word.length; i++) {
            if (i > 0) System.out.print(", ");
            System.out.print("[");
            for (int j = 0; j < word[i].length; j++) {
                if (j > 0) System.out.print(", ");
                System.out.print(word[i][j]);
            }
            System.out.print("]");
        }
        System.out.println("]");
    }

    public static void printPlain(char[][] word) {
        for (int i = 0; i < word.length; i++) {
            if (i > 0) System.out.print(", ");
            for (int j = 0; j < word[i].length; j++) {
                if (j > 0) System.out.print(", ");
                System.out.print(word[i][j]);
            }
        }
        System.out.println();
    }
}

我所做的主要更改是数组中的值实际上被转换了(我不确定你是否想要这个;你之前没有将任何新值存储回数组中),数据被处理为char 未转换为 String,转换是通过计算完成的,而不是每个值的特殊情况,并且转换数据和打印数据已经相互分离。

还有一些小的变化。数据现在以您演示的格式打印,带有括号,没有假设内部数组总是正好有两个元素,并且类名已更改为以大写字母开头。

另一个小音符。在将值从小写字母转换为数字的行中,表达式在括号中并被转换回char。这是因为当您添加和减去 chars 时,Java 执行到 int 的扩展转换,因此要将值存储回 char[][] 需要再次将其转换为 char

我忘记了 java.util.Arrays 类中的 Java 中已经有一个方法可以格式化带括号的多维数组:Arrays.deepToString(word) 将为您提供与上述 println 方法相同的格式。我还展示了一个类似的printPlain 方法,但如果您喜欢更清晰的输出格式,则缺少括号。您还可以轻松修改此方法,使其附加到 StringBuilder 并返回 String,而不是直接打印数组。

【讨论】:

  • 很好,它有效。但是,是否可以在不添加括号 [] 或 {} 的情况下打印为 2D 数组格式?
  • 我将对此进行补充。您可以轻松修改上面的 println 方法以省略括号,或者有一个内置的 Java 方法 (Arrays.deepToString) 将使用括号打印它。
  • 附带说明,在 main 方法中从字母转换为数字仅适用于字母 a 到 j,因为 char '0' + 10(10 是 k - a 等于)是: 而不是 10,正如后续问题中所述 - stackoverflow.com/questions/22734785/…
  • 我没有看到后续问题,并且将自己限制在这个问题中的那些字母的答案中,但很高兴注意到这一点。要完成后续问题的要求,需要采用不同的方法。感谢您提出这个问题。
【解决方案2】:

一切都正确匹配。这是一个二维数组,因此您的数组正在逐一打印。

如果您不希望它们出现在单独的行中,那么请去掉 for 循环末尾的 System.out.println(); 语句。

【讨论】:

  • 问题是如何将变换值也放入二维数组中。所以,结果应该是 {{"0","1"},{"2","3"},{"4","5"}}。
【解决方案3】:

首先使用Arrays.toString() 将您的数组转换为字符串。然后进行更换。例如:

char [][] word= {{'a','b'},{'c','d'},{'e','f'}};  
String strWord = "";
for(char []w : word){
    // convert array int [x, y] format
    strWord += Arrays.toString(w)+",";
}
// removing comma(,) from end.
strWord = strWord.replaceAll(",$", "");

// do your replacement.
strWord = strWord.replace("a","0");
// ... more

// output
System.out.println("["+strWord+"]");

【讨论】:

  • 啊,我的眼睛!它燃烧!护目镜什么都不做!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-31
  • 2012-03-31
  • 2010-12-28
  • 2012-08-24
  • 2013-02-08
相关资源
最近更新 更多