从字符列表中删除一个字符

20

我在循环中遇到了不想要的char转换为int。假设我有一个字符列表,我想要删除其中一个字符:

我在循环中遇到了不想要的char转换为int。假设我有一个字符列表,我想要删除其中一个字符:

List<Character> chars = new ArrayList<>();
chars.add('a');
chars.add('b');
chars.add('c');
chars.remove('a');  // or chars.remove('a'-'0');

那么'a'被解释为它的int值,我收到了一个IndexOutOfBoundsException异常。 有没有简单的解决方法?

3个回答

27

一个 char 会被提升为一个 int,由于优先级更高,自动装箱将被忽略,因此调用了remove(int)而不是你可能直觉期望的remove(Object)

你可以通过手动包装参数来强制调用“正确”的方法:

chars.remove(Character.valueOf('a'));

8

您需要将其强制转换为对象类型,以便编译器选择remove(Object)而不是remove(int)

chars.remove((Character) 'a');

6

您可以搜索列表,查找 a 的位置。

chars.remove(chars.indexOf('a'));

不需要那样做;你只需要调用正确的重载。 - SLaks
哇,我开始对自己的想法产生了疑问。我最初说要显式地进行转换,然后改变了我的答案。 - learner0000
我知道,但是你最初的转换(我相信)是错误的。将同一类型转换没有效果。请看我的答案。 - SLaks
我错了,不管怎样,我已经投票选择了你的答案 :). 也许这是另一种方式。 - learner0000

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