在这种情况下为char提供默认值

时间:2012-03-30 09:27:21

标签: java

根据业务要求,根据传递的输入,我需要返回适当的值

例如如下所示

public String getValue()
{

if (array.length <2 ) 
{
return ""; 
}

if (array.length == 4) 
{
return "A";
}
if (array.length == 3) 
{
return "B";
}
if (array.length == 2) 
{
return "B";
}

return "Z";

}


char c = new Myclass().getValue().charAt(0);

//我的问题是,如果长度小于2,则返回null,因此抛出java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0异常

请让我知道,处理这个问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

“最佳处理方式”特定于您的需求/背景。

以下是您可以尝试的一些想法(取决于您的需要/可能性):

  • 确保没有长度&lt; 2的数组传递给您的函数。
  • 检查空字符串的返回值,如果为空,则不要取chatAt()
  • 返回特定字符而不是空字符串

你正在寻找第二个。在这种情况下,你可以这样做:

char c = '\0'; // set it to some default value, in case the if's body is not executed.
String val = new MyClass().getValue();
if (val != null && !val.isEmpty()) {
  c = val.charAt(0);
}

注意:上面的代码检查null和空字符串,只是为了安全(例如正确处理getValue可能的未来修改),因为你不能在空字符串上调用charAt,也不是空洞的。

注意:""表示空字符串。空字符串是null

注意:isEmpty()检查字符串是否为空字符串。如果字符串是null,则不要调用(因此if中的评估顺序

注意:正如其他人所指出的,如果getValue()方法在非错误情况下总是返回长度为1的字符串,并且除了提取第一个字符之外不使用返回值,则可以将返回类型更改为char并返回您感兴趣的字符(例如'A'而不是"A")。这将要求您使用选项3并返回一个特殊字符(您的选择,只是确保它不是错误情况下的“正确”字符之一)(例如长度数组<2)。这样就没有为一个角色创建的字符串。

编辑:基于评论的固定代码

答案 1 :(得分:0)

您可以将它放在if语句中,如下所示

if(Myclass().getValue() != null && Myclass().getValue().length() > 0) {
     c = new Myclass().getValue().charAt(0);
}

你可能想要在某个地方的if语句之外定义c

答案 2 :(得分:0)

您可以将public String getValue()返回类型切换为char(因为您只返回字符),或者,如果它不是一个选项,则返回空字符:

if (array.length <2 ) 
{
     return "\0"; 
}

按照您使用getValue()的方式,我还建议将其设为静态并将array作为参数传递:

public static char getValue(Object[] array)

并使用它:

char c = Myclass.getValue(array);