我很困惑如何将2D char数组中的值转换为数字(整数)。
我们假设数组是:[[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
如何以正确的方式解决这个问题?
答案 0 :(得分: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
,转换是通过计算而不是每个值的特殊情况完成的,转换数据并打印它们已经相互分离。< / p>
还有一些小的变化。数据现在以您演示的格式打印,带括号,不假设内部数组总是只有两个元素,并且类名已更改为以大写字母开头。
另一个小调。在将值从小写字母转换为数字的行上,表达式位于括号中并被转换回char
。这是因为当您添加和减去chars
时,Java会执行向int
的扩展转换,因此要将值存储回char[][]
,必须将其转换为char
试。
我忘记了java.util.Arrays
类中已有一个Java方法来格式化带括号的多维数组:Arrays.deepToString(word)
将为您提供与上面println
方法相同的格式。我还展示了一个类似的printPlain
方法,但如果您更喜欢更清晰的输出格式,则缺少方括号。您也可以轻松修改此方法,使其附加到StringBuilder
并返回String
,而不是直接打印数组。
答案 1 :(得分:0)
一切都正确匹配。这是一个二维数组,因此您的数组将逐个打印。
如果您不希望它们单独行,那么在for循环结束时删除System.out.println();
语句。
答案 2 :(得分:0)
首先使用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+"]");