在java中使用.equals()比较字符串

时间:2015-02-20 02:19:30

标签: java

我有这个代码接受用户输入,使用.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]);
        }
    }

4 个答案:

答案 0 :(得分:3)

array[a].equals(" ")返回truefalse,如果您想要撤销条件,则需要使用!(不是)

例如

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());

第一个拆分将从结果字符串中删除所有空格,第二个拆分将每个剩余的字符串拆分为其组成字符串。不确定哪个实际上更有效率。如果有很多空格,第二个可能会更好。