句柄NullPointerException java

句柄NullPointerException java,java,python,nullpointerexception,Java,Python,Nullpointerexception,我有一个java类,它检查列表中的每个项目,并使用库对其进行一些处理!如果无法处理该项,它将抛出NullPointerException 我用python调用这个类 如果出现这样的异常情况,我们有没有办法说什么都不做 例如,它不识别像“jeren”这样的项目。我可以处理空项目,但也需要处理未知项目 有什么想法吗 我在python中使用的Java类的一部分是: public static String doStaff(String word) throws IOException {

我有一个java类,它检查列表中的每个项目,并使用库对其进行一些处理!如果无法处理该项,它将抛出NullPointerException

我用python调用这个类

如果出现这样的异常情况,我们有没有办法说什么都不做

例如,它不识别像“jeren”这样的项目。我可以处理空项目,但也需要处理未知项目

有什么想法吗

我在python中使用的Java类的一部分是:

public static String doStaff(String word) throws IOException {  


    String str = null;
    TurkishMorphParser parser = TurkishMorphParser.createWithDefaults();
    str = new Stm(parser).parse(word);
    //System.out.println("str = " + str);
    String replace = str.replace("[","");
    String replace1 = replace.replace("]","");
    List<String> result1 = new ArrayList<String>(Arrays.asList(replace1.split(",")));
    String result = result1.get(0).toString();
    //System.out.println("Result = " + result);
    return result;


}
公共静态字符串doStaff(字符串字)引发IOException{
字符串str=null;
TurkishMorphParser=TurkishMorphParser.createWithDefaults();
str=新的Stm(解析器).parse(word);
//System.out.println(“str=“+str”);
字符串replace=str.replace(“[”,”);
字符串replace1=replace.replace(“]”,“”);
List result1=newarraylist(Arrays.asList(replace1.split(“,”));
String result=result1.get(0.toString();
//System.out.println(“结果=”+结果);
返回结果;
}

当然,您可以捕获NullPointerException而不执行任何操作,但这通常是一个非常糟糕的想法(异常速度慢且无法读取):

在这里,您可以得到NullPointerException,因为您得到的列表的第一个元素可能是null。相反,你可以:

List<String> result1 = new ArrayList<String>(Arrays.asList(replace1.split(",")));
String result;
if(result1.size()>0) {
   result = result1.get(0).toString();
}
List result1=newarraylist(Arrays.asList(replace1.split(“,”));
字符串结果;
如果(result1.size()>0){
result=result1.get(0.toString();
}

NullPointerException,顾名思义是一个异常(我应该说是运行时异常),当您尝试在需要/必须使用值的地方使用Null值时,编译器会抛出该异常。因此,在执行某些需要进行一些检查和一些有效值参数的函数之前,必须检查您使用
str
的位置的值。字符串可以为null,但有时该方法需要一个有效值才能使用

如果您只想捕获异常,请单击此处

try {
  String str = null;
  TurkishMorphParser parser = TurkishMorphParser.createWithDefaults();
  str = new Stm(parser).parse(word);
  //System.out.println("str = " + str);
  String replace = str.replace("[","");
  String replace1 = replace.replace("]","");
  List<String> result1 = new ArrayList<String>(Arrays.asList(replace1.split(",")));
  String result = result1.get(0).toString();
  //System.out.println("Result = " + result);
  return result;
} catch (NullPointerException error) {
  /* Display message */
  System.out.print("Sorry, there was an error: " + e.Message);
}
也许这就是你把它注释掉的原因

所以,你也能应付。如果在对上述行进行所有处理后,
str
null

if(str == null) {
  System.out.print("Sorry, doesn't recognise it.");
} else {
  System.out.println("str = " + );
}

然后再次前进到执行并再次检查值。这样,可以将错误降至最低!:)

为什么不使用简单的
if(someVariable!=null)
检查?NPE永远不应该被试抓,因为你可以很容易地避开它们+1,@Jeroenvanevel,我同意你!对if-else进行简单的值检查就足够了。:)我这样做是为了空项。。但正如我所说,我需要检查导致此异常的项目。我正在土耳其语上做一些处理,所以函数在某些单词上不能正常工作,这就是它抛出的原因exception@Niemand恐怕这不是你想要的答案。@Niemand不太可能。您有两种情况,一种是允许引用为null,在这种情况下,您必须使用
if(…!=null){/*do stuff*/}
进行检查,另一种是它可能不为null,这表示之前的处理出了问题,或者数据格式不正确,在这种情况下,您必须提出一个异常,指出什么是不正确的,以及可能要做什么来修复它。这个答案暗示的只是接受一个异常。如果result1为null,那么result1.size()也会抛出NullPointerException…@kamil09875不知何故,我无法想象新的ArrayList会返回null值的任何可能性。您能详细说明一下吗?@Niemand“因为您得到的列表的第一个元素可能为null”NullPointerException是手动或由JVM抛出的,而不是由编译器抛出的
try {
  String str = null;
  TurkishMorphParser parser = TurkishMorphParser.createWithDefaults();
  str = new Stm(parser).parse(word);
  //System.out.println("str = " + str);
  String replace = str.replace("[","");
  String replace1 = replace.replace("]","");
  List<String> result1 = new ArrayList<String>(Arrays.asList(replace1.split(",")));
  String result = result1.get(0).toString();
  //System.out.println("Result = " + result);
  return result;
} catch (NullPointerException error) {
  /* Display message */
  System.out.print("Sorry, there was an error: " + e.Message);
}
System.out.println("str = " + str);
if(str == null) {
  System.out.print("Sorry, doesn't recognise it.");
} else {
  System.out.println("str = " + );
}