将 2D CharArray 转换为 String 并使用 .charAt() 比较字符是否正确?
Is it correct to convert 2D CharArray to String and use .charAt() to compare a character?
所以我有一个名为 "temp" 的 char
变量,当我处于第三个时,我想将其与存储在 "X" CharArray[X][Y]
中的元素进行比较for
在二维数组后循环。
例如:
char temp;
temp = ' ';
String end;
end = "";
for (int i = 0; i < CharArray.length; i++){
for (int m = 0; m < 2; m++){
if (somethingY){
if (somethingZ){
for (int j = 0; j < something.length; j++){
//something
temp = somethingX;
if (temp == String.valueOf(CharArray[i][m]).charAt(0)){
end = String.valueOf(CharArray[i][m]);
System.out.print(end);
}
}
}
}
}
}
我试过在显示 "temp = somethingX" 的地方打印 "temp" 并且打印得很好。但是当我尝试将 String
保存到 String variable
时,它不会打印名为 "end".
的变量
根据 this,如果对象是其他东西,它不会做任何事情,但是 "end" 是 一个 String
。
那么,我做错了什么?
编辑:如果出现混淆,“我正在尝试 print
"end",但我想如果 temp == String.valueOf(CharArray[i][m]).charAt(0)
是正确的,那么 "end" 也应该如此” s 部分。”。
EDIT2:为人们定义 "temp"...
EDIT3:我试过“end.equals(String.valueOf(CharArray[i][m]));
”,但当我尝试打印它时仍然没有任何反应。我没有收到任何错误。
EDIT4:我尝试将 String.valueOf(CharArray[i][m]).charAt(0)
放入另一个名为 "temp2" 的变量中并执行 if (temp == temp2)
,但还是一样。
EDIT5:我尝试了 temp == CharArray[0][m]
然后 end = CharArray[0][m]
,但仍然没有打印出来。
EDIT6:好的。感觉这永远不会得到解决,我只会说出我的问题的全部要点。 -> 我有一个 ArrayList
,其中每一行都是一个字母、space 和一个数字(例如 "E 3")的组合。我需要检查一个字母是否重复,如果是,我需要对所有重复字母的数字求和。
例如,如果我有以下 ArrayList
:
Z 3
O 9
I 1
J 7
Z 7
K 2
O 2
I 8
K 8
J 1
我需要输出为:
Z 10
O 11
I 9
J 8
K 10
我不想让别人为我做所有事情,但似乎我别无选择,因为我已经在这个问题上浪费了 2 天时间,运行 没时间了.
使用地图:
ArrayList<String> input=new ArrayList<String>();
input.add("O 2");
input.add("O 2");
Map<String, Integer> map= new HashMap<String, Integer>();
for (String s:input) {
String[] splitted=s.split(" ");
String letter=splitted[0];
Integer number=Integer.parseInt(splitted[1]);
Integer num=map.get(letter);
if (num==null) {
map.put(letter,number);
}
else {
map.put(letter,number+num);
}
}
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + Integer.toString(entry.getValue()));
}
不使用地图:
ArrayList<String> input=new ArrayList<String>();
input.add("O 2");
input.add("O 2");
ArrayList<String> letters=new ArrayList<String>();
ArrayList<Integer> numbers=new ArrayList<Integer>();
for (String s:input) {
String[] splitted=s.split(" ");
String letter=splitted[0];
Integer number=Integer.parseInt(splitted[1]);
int index=-1;
boolean isthere=false;
for (String l:letters) {
index++;
if (l.equals(letter)) {
isthere=true; //BUGFIX
break;
}
}
if (isthere==false) { //BUGFIX
letters.add(letter);
numbers.add(number);
}
else {
numbers.set(index,numbers.get(index)+number);
}
}
for (int i=0; i < letters.size(); i++) {
System.out.println(letters.get(i));
System.out.print(numbers.get(i));
}
将其转换回来以获得良好的输出:
ArrayList<String> output=new ArrayList<String>();
for (int i=0; i < letters.size(); i++) {
output.add(letters.get(i)+" "+Integer.toString(numbers.get(i));
}
如有任何问题,请随时发表评论。
所以我有一个名为 "temp" 的 char
变量,当我处于第三个时,我想将其与存储在 "X" CharArray[X][Y]
中的元素进行比较for
在二维数组后循环。
例如:
char temp;
temp = ' ';
String end;
end = "";
for (int i = 0; i < CharArray.length; i++){
for (int m = 0; m < 2; m++){
if (somethingY){
if (somethingZ){
for (int j = 0; j < something.length; j++){
//something
temp = somethingX;
if (temp == String.valueOf(CharArray[i][m]).charAt(0)){
end = String.valueOf(CharArray[i][m]);
System.out.print(end);
}
}
}
}
}
}
我试过在显示 "temp = somethingX" 的地方打印 "temp" 并且打印得很好。但是当我尝试将 String
保存到 String variable
时,它不会打印名为 "end".
根据 this,如果对象是其他东西,它不会做任何事情,但是 "end" 是 一个 String
。
那么,我做错了什么?
编辑:如果出现混淆,“我正在尝试 print
"end",但我想如果 temp == String.valueOf(CharArray[i][m]).charAt(0)
是正确的,那么 "end" 也应该如此” s 部分。”。
EDIT2:为人们定义 "temp"...
EDIT3:我试过“end.equals(String.valueOf(CharArray[i][m]));
”,但当我尝试打印它时仍然没有任何反应。我没有收到任何错误。
EDIT4:我尝试将 String.valueOf(CharArray[i][m]).charAt(0)
放入另一个名为 "temp2" 的变量中并执行 if (temp == temp2)
,但还是一样。
EDIT5:我尝试了 temp == CharArray[0][m]
然后 end = CharArray[0][m]
,但仍然没有打印出来。
EDIT6:好的。感觉这永远不会得到解决,我只会说出我的问题的全部要点。 -> 我有一个 ArrayList
,其中每一行都是一个字母、space 和一个数字(例如 "E 3")的组合。我需要检查一个字母是否重复,如果是,我需要对所有重复字母的数字求和。
例如,如果我有以下 ArrayList
:
Z 3
O 9
I 1
J 7
Z 7
K 2
O 2
I 8
K 8
J 1
我需要输出为:
Z 10
O 11
I 9
J 8
K 10
我不想让别人为我做所有事情,但似乎我别无选择,因为我已经在这个问题上浪费了 2 天时间,运行 没时间了.
使用地图:
ArrayList<String> input=new ArrayList<String>();
input.add("O 2");
input.add("O 2");
Map<String, Integer> map= new HashMap<String, Integer>();
for (String s:input) {
String[] splitted=s.split(" ");
String letter=splitted[0];
Integer number=Integer.parseInt(splitted[1]);
Integer num=map.get(letter);
if (num==null) {
map.put(letter,number);
}
else {
map.put(letter,number+num);
}
}
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " " + Integer.toString(entry.getValue()));
}
不使用地图:
ArrayList<String> input=new ArrayList<String>();
input.add("O 2");
input.add("O 2");
ArrayList<String> letters=new ArrayList<String>();
ArrayList<Integer> numbers=new ArrayList<Integer>();
for (String s:input) {
String[] splitted=s.split(" ");
String letter=splitted[0];
Integer number=Integer.parseInt(splitted[1]);
int index=-1;
boolean isthere=false;
for (String l:letters) {
index++;
if (l.equals(letter)) {
isthere=true; //BUGFIX
break;
}
}
if (isthere==false) { //BUGFIX
letters.add(letter);
numbers.add(number);
}
else {
numbers.set(index,numbers.get(index)+number);
}
}
for (int i=0; i < letters.size(); i++) {
System.out.println(letters.get(i));
System.out.print(numbers.get(i));
}
将其转换回来以获得良好的输出:
ArrayList<String> output=new ArrayList<String>();
for (int i=0; i < letters.size(); i++) {
output.add(letters.get(i)+" "+Integer.toString(numbers.get(i));
}
如有任何问题,请随时发表评论。