java - 我收到错误 - 线程 "main"java.lang.NullPointerException 中的异常 java.lang.StringBuffer.<init>(未知来源)

标签 java

在具有“n”个字符串的字符串数组“a”中,我必须从给定的字符串中选择佩林对。对于 ex 作为输入 3个 bba abb abb 输出=2 我做错了什么

import java.util.*;
class Test {
  public static void main(String args[]) {
    int i,j,k=0;
    Scanner h=new Scanner(System.in);
    int n=h.nextInt();
    String a[]=new String[n];

    for(i=0;i<n;i++) {
      if(a[i]!="") {
        String rev = (new StringBuffer(a[i])).reverse().toString();
        for(j=i+1;j<n;j++) {
          if(rev.equals(a[j])) {
            k++;
            a[j]="";
          }
        }
      }
    }

    h.close();
  }
}

最佳答案

您正在创建一个字符串数组,但从未初始化其成员。

成员的默认值为空。

因此,当您调用 new StringBuffer(a[i]) 时,您将传递一个空值。

您可以通过以下方式避免这种情况:

  • 用一些东西填充数组。
  • 除了现有的空字符串检查之外,还要检查 null。

顺便说一句,您正在尝试使用相等运算符 != 检查空字符串。这将检查引用是否不同,而不是它们指向的 String 对象是否包含不同的字符串。您需要使用以下任一方式进行检查:

  (null != a[i]) && ! a[i].isEmpty()

  ! "".equals( a[i] )

或者,如果您使用的是 Google 的 Guava 库:

  ! Strings.isNullOrEmpty( a[i] )

关于java - 我收到错误 - 线程 "main"java.lang.NullPointerException 中的异常 java.lang.StringBuffer.<init>(未知来源),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31618987/

相关文章:

java - 扩展 Observable 的类的接口(interface)

c# - 帮助理解如何调用不同类型的测试

java - 如何在 Java 类中实现 Kotlin 挂起方法?

java - Realm 实例已经关闭,无法使用

java - FetchType = Lazy 且可选 = false 在 JPA 中不起作用

java - 如何读取附加到我已读取的文件末尾的文本?

java - 轻量级 JMS 选择器替代方案

java - 搜索保存在文件中的 ArrayList 中的数据并将其打印在文本字段中

Java堆叠组件

java - ArrayList "cannot be resolved"尝试在方法中访问 ArrayList 时,Java