【问题标题】:I m getting error -- Exception in thread "main" java.lang.NullPointerException at java.lang.StringBuffer.<init>(Unknown Source)我收到错误 - java.lang.StringBuffer.<init> 处的线程“main”java.lang.NullPointerException 中的异常(未知来源)
【发布时间】:2023-03-30 02:45:01
【问题描述】:

在具有“n”个字符串的字符串“a”数组中,我必须从给定的字符串中选择佩林对。例如用于输入 3 巴巴 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();
  }
}

【问题讨论】:

  • 看起来a[i] 在某些时候是null
  • 哪一行出现错误?
  • @OlivierPoulin 它在问题的标题中。
  • 请不要使用StringBuffer,因为它在十多年前就被StringBuilder取代了。

标签: java


【解决方案1】:

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

成员的默认值为null。

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

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

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

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

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

  ! "".equals( a[i] )

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

  ! Strings.isNullOrEmpty( a[i] )

【讨论】:

  • 谢谢你解决了它,我得到了输出:-),还有一个问题,为什么我不能用相等运算符检查空字符串
  • @ShivangiAwasthi - 你在编辑过程中抓住了我。现在已经包含在上面了。相等运算符检查 references 是否相等。你可以在这个问题中看到更多细节:stackoverflow.com/questions/513832/…
  • @Andy Thomas 检查 a[I] 是否为空的更好方法是“a[i].isEmpty()”
  • @FredK - 你是对的,这比显式长度检查更高级别 - 这就是 isEmpty() 的实现方式。我会在上面添加它。 "".equals() 检查引用是否为空。还有guava的Strings.isNullOrEmpty()。
【解决方案2】:

您很可能希望从控制台读取您没有执行的单词。我建议你使用 Scanner.nextLine()。

int n=h.nextInt();
h.nextLine(); // discard the rest of the line.
String a[]=new String[n];

for(int i = 0; i < n; i++) {
   // read a word.
   a[i] = h.nextLine();

【讨论】:

  • Scanner.next(),如果单词在同一行。你是对的,如果计数来自标准输入,那么数据很可能也是如此。
猜你喜欢
  • 2016-07-30
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 2014-12-15
  • 2016-02-02
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多