Java中布尔字符比较 - 尝试同时比较三个字符

3
我正在尝试编写一段代码来模拟旧键盘上的文本消息。例如,数字2代表字母a、b、c,数字3代表def等。我可以读取字符串并获取字符,但是我正试图开发一种优雅的Java方式来将字符映射到数字。我可以使用Character.compare,但我必须将我的字符与整个字母表进行比较。
compareOneTwo = Character.compare(ch[r], 'a'); etc

我更倾向于使用一个布尔函数,它使用“或”同时比较三个字符。
if(ch[r] = 'a'||'b'||'c') { 

但是我正在苦苦挣扎 - 想让它工作起来。

我知道这很基础,可能是一个愚蠢的错误,但我们都必须从某个地方开始......

任何帮助将不胜感激。


所以,只是为了澄清:您想举例按两次1并获得b。如果按四次,则获得d?还是您只需要一种告知键盘上哪个数字对应哪个字母的方式? - Jan Held
1
我不认为这是一个好的解决方案,但是char c = ch[r]; if (c == 'a' || c == 'b' || c == 'c')可以工作。 - eckes
eckes是正确的!每个||必须是一个完整的比较!此外,使用=而不是==,你正在将'a'分配给chr[r],而不是将chr[r]处的值与'a'进行比较。无论如何,你不能使用||&&运算符将一个值与多个值进行比较!如果这是C语言,你所做的是“将'a'分配给chr[r],如果结果非零,或'b'的值非零,或'c'的值非零,则执行你的if()操作。在Java中,零/非零不像C中那样是真/假,Java编译器会显示错误?始终提供问题和错误的基本详细信息,以便人们不必猜测! - clearlight
2个回答

1

如果你想随意使用OR运算符,那是不行的。

如果你不想使用许多由OR(||)运算符连接的条件,你还有其他选择。

你可以创建一个Set并使用contains

if (Set.of('a','b','c').contains(ch[r])) {}

如果您需要检查连续的范围,可以使用一系列字符:

if (ch[r] >= 'a' && ch[r] <= 'c') {}

1

你自己说了,你正在尝试找到一种将字符映射到数字的方法,所以使用一个映射表(map)!

Map<Character, Integer> characters = new HashMap<>();
characters.put('a', 2);
characters.put('b', 2);
characters.put('c', 2);
characters.put('d', 3);
...
characters.put('z', 0);

Integer number = characters.get('a');
System.out.println(number); // Will print '2'

初始设置需要编写更多代码,因为您必须指定整个字母表,但将其存储在静态变量中,它将为整个应用程序完成一次。这肯定会产生最佳的速度性能,在内存使用方面,仅有26个字符和同样多的整数,所以可以忽略不计 :) 另一个优点是更新容易,如果您需要处理一个新字符,比如*,只需向映射添加一行即可完成!

1
这肯定会在速度和内存使用方面产生最佳表现 - 尽管在许多情况下差异应该是可以忽略不计的,但这可能并非完全正确。实际上,如果只需要“映射”字符a-z,那么一个简单的int[]包含数字和一个将字符转换为适当索引的方法(例如int index = c - 'a';)可能会更快,并且需要更少的内存 ;) - 不过它不够灵活,例如添加*可能需要更多的工作。 - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接