我有这个代码接受用户输入,使用.split()
将其分解为数组,然后将唯一不是" "
的值添加到列表中,通常在比较时我们说整数我会写==
或!=
,但我怎么写不等于使用.equals()
?我写(!array.equals(" ");
吗?
Scanner in = new Scanner(System.in);
String input = in.next();
String[] array = input.split("");
List<String> list = new ArrayList<String>();
for (int a = 0; a < array.length; a++) {
if (array[a].equals(" ")) {
list.add(array[a]);
}
}
答案 0 :(得分:3)
array[a].equals(" ")
返回true
或false
,如果您想要撤销条件,则需要使用!
(不是)
例如
if (!array[a].equals(" ")) {
其中读取“如果位置a中数组中的元素不等于”“
答案 1 :(得分:1)
是的,您将使用!
not运算符来反转任何布尔表达式,但在此您也应该使用trim()
。
if (!array[a].trim().equals("")) {
这确保了如果输入有一个或多个空格,则它不会被添加到List
。另一种方法是使用isEmpty()
之类的
if (!array[a].trim().isEmpty()) { // Java 6 and above
答案 2 :(得分:0)
由于array.equals产生一个布尔值,所以!修饰符会反转结果。
答案 3 :(得分:0)
将字符串与文字值进行比较时,请始终使用文字值调用.equals()
,因为文字值为空安全:
" ".equals(array[a]);
如果您正在使用Java8,那么您可以非常简洁地使用流来执行您想要的操作:
List<String> notSpaces = Pattern.compile("").splitAsStream(input)
.filter(s->!" ".equals(s))
.collect(Collectors.toList());
你也可以偷偷摸摸地分裂两次,第一次分裂空格字符:
Pattern splitAll = Pattern.compile("");
List<String> notSpaces = Pattern.compile(" +").splitAsStream(input)
.flatMap(s->splitAll.splitAsStream(s))
.collect(Collectors.toList());
第一个拆分将从结果字符串中删除所有空格,第二个拆分将每个剩余的字符串拆分为其组成字符串。不确定哪个实际上更有效率。如果有很多空格,第二个可能会更好。