运算符==不能应用于java.lang.String char
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运算符==不能应用于java.lang.String char相关的知识,希望对你有一定的参考价值。
我在NetBeans Java应用程序中没有遇到任何错误,但在将代码应用到android Java项目中时,我确实得到了上述错误。我尝试了if (alpha[i].equals(c)) {
,但后来我得不到像NetBeans那样的结果,它将String转换为Morse,例如SOS
到... --- ...
NetBeans Java应用程序(有效,当我输入SOS时,我得到...... --- ...):
private static String toMorse(String text) {
char[] characters = text.toUpperCase().toCharArray();
StringBuilder morseString = new StringBuilder();
for (char c : characters) {
for (int i = 0; i < alpha.length; i++) {
if (alpha[i] == c) {
morseString.append(morse[i] + " ");
break;
}
}
}
return morseString.toString();
}
Android Java Project(不起作用,当我输入一个String时,我什么都没得到):
public String toMorse(String text) {
char[] characters = text.toUpperCase().toCharArray();
StringBuilder morseString = new StringBuilder();
for (char c : characters) {
for (int i = 0; i < alpha.length; i++) {
if (alpha[i] == c) { // error is on this line
morseString.append(morse[i] + " ");
break;
}
}
}
return morseString.toString();
}
奇怪的是,这部分代码在NetBeans和Android Studio中均有效(当我输入...... ---我得到SOS时):
public String toEnglish(String text) {
String[] strings = text.split(" ");
StringBuilder translated = new StringBuilder();
for (String s : strings) {
for (int i = 0; i < morse.length; i++) {
if (morse[i].equals(s)) {
translated.append(alpha[i]);
break;
}
}
}
return translated.toString();
}
alpha和morse数组:
private String[] alpha = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J",
"K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
"W", "X", "y", "z", "1", "2", "3", "4", "5", "6", "7", "8",
"9", "0", " "};
private String[] morse = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.",
"....", "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.",
"--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
"-.--", "--..", ".----", "..---", "...--", "....-", ".....",
"-....", "--...", "---..", "----.", "-----", "|"};
问题是alpha
是String
的数组,而c
是一个字符。你正在比较(char == string)
,这显然不能像预期的那样工作。
alpha
是String
(不是char
)的阵列,一个可能的解决方案
private char[] alpha = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8',
'9', '0', ' '};
另一个是
if (alpha[i].charAt(0) == c) { // <-- a String is not a char.
alpha[c]
返回一个字符串(例如alpha[1]
是字符串“B”)。由于alpha
只包含单字符字符串,因此可以将其转换为字符数组:
private char[] alpha = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
'W', 'X', 'y', 'z', '1', '2', '3', '4', '5', '6', '7', '8',
'9', '0', ' '};
char[] alpha1 = new char[26] {
'A',
'B',
'C',
'D',
'E',
'F',
'G',
'H',
'I',
'J',
'K',
'L',
'M',
'N',
'O',
'P',
'Q',
'R',
'S',
'T',
'U',
'V',
'W',
'X',
'Y',
'Z'
};
char[] cipher = new char[26] {
'Z',
'Y',
'X',
'W',
'V',
'U',
'T',
'S',
'R',
'Q',
'P',
'O',
'N',
'M',
'L',
'K',
'J',
'I',
'H',
'G',
'F',
'E',
'D',
'C',
'B',
'A'
};
string plain = textBox1.Text;
char[] N = textBox1.Text.ToArray();
textBox3.Text = "";
int X = 0;
for (int i = 0; i < alpha1.Length; i++) {
if (N[0] == alpha1[0])
textBox3.Text += cipher[X];
X++;
}
//..............DISPLAY
textBox3.Text = "";
int b = 0;
for (int i = 0; i < cipher.Length; i++) {
textBox3.Text += cipher[b];
}
b++;
以上是关于运算符==不能应用于java.lang.String char的主要内容,如果未能解决你的问题,请参考以下文章
运算符 '>' 不能应用于类型 'string' 和 'number' 错误
运算符 '!=' 不能应用于类型为 'Task' 和 'int' 的操作数
二元运算符'+'不能应用于'String'和'() -> String'类型的操作数
Swift 3 为啥不能将二元运算符“===”应用于两个“日期”操作数?