我正在尝试进行QA面试,我想处理尽可能多的测试用例。我相信我的方法适用于所有情况,除非输入是null
我不知道如何处理该异常。在代码运行之前,编译器会先给出错误。所以我不知道如何处理这个异常。我四处阅读,不推荐catch
NullPointerException
。我将如何处理null
输入。此外,如果其他人可以想到其他测试用例,我很乐意测试并看看它!
以下是我的测试用例:
""
"abcdef"
"abbbba"
null
不太确定如何处理
转义字符
"\n" --> "n\"
"\t" --> "t\"
特殊字符,例如
áe --> eá
代码:
public static String reverseStr(String str) {
int len = str.length();
if (len <= 0) {
return "Empty String";
}
char[] strArr = new char[len];
int count = 0;
for (int i = len - 1; i >= 0; i--) {
strArr[count] = str.charAt(i);
count++;
}
return new String(strArr);
}
在此处提出进一步建议之后是更新后的代码:
public static String reverseStr(String str) {
if ( str == null ) {
return null;
}
int len = str.length();
if (len <= 0) {
return "";
}
char[] strArr = new char[len];
int count = 0;
for (int i = len - 1; i >= 0; i--) {
strArr[count] = str.charAt(i);
count++;
}
return new String(strArr);
}
答案 0 :(得分:3)
如果string为null,编译器不会给出错误,但在运行代码时会出现NullPointerException。您的reverseStr方法可以检查
if ( str == null ) {
return "null string passed in";
}
或者你可以做类似
的事情int len = (str != null) ? str.length() : 0
现在null和空字符串的长度都为0.这取决于你是否要以不同的方式处理null和empty。
答案 1 :(得分:3)
对于null case,您可以先在if(str==null) throw new IllegalArgumentException("arg must be not null")
添加简单测试,然后在声明中添加throws IllegalArgumentException
。
答案 2 :(得分:2)
你应该在方法中做的第一件事检查无效:
public static String reverseStr(String str) {
if(str==null){
return null;
}
else{
//the rest of your code goes here
}
}
答案 3 :(得分:1)
如果字符串为空,我不明白为什么要返回"Empty String"
。这意味着输入字符串为"gnirtS ytpmE"
。
如果字符串为空,则应返回空字符串。如果字符串是null
,您应该返回null
(或抛出异常)。
if (str == null) return null;
int len = str.length();
if (len == 0) return "";
答案 4 :(得分:1)
NPE(NullPointerException)来自于参数'str',当它为null时。如果用'null'替换参数是有意义的,所以它看起来像这样:int len = null.length();这没有多大意义。 '||'或者运算符与'|'不同或者运算符,如果第一个元素为真,则不评估另一个操作数,因为可以确定整个结果。在这种情况下利用这一点可以让你安全地调用str.isEmpty(),因为它保证不为null。
public static String reverseStr(String str) {
if(null == str || str.isEmpty()){
return "Empty String";
}
int len = str.length();
char[] strArr = new char[len];
int count = 0;
for (int i = len - 1; i >= 0; i--) {
strArr[count] = str.charAt(i);
count++;
}
return new String(strArr);
}