给定一个字符串作为输入,返回字符串,其中最后两个字符被交换。并且,如果字符串少于2个字符,则不执行任何操作并返回输入字符串。
这是我到目前为止编写的代码:
public class SwapLastChars {
static String testcase1 = "Hello";
public static void main(String args[]) {
SwapLastChars testInstance = new SwapLastChars();
String result = testInstance.swap(testcase1);
System.out.println(result);
}
public String swap(String str1) {
String str = "";
int length = str1.length();
char last = str1.charAt(length - 1);
char l = str1.charAt(length - 2);
if (length == 1)
return str1;
for (int i = 0; i < str1.length() - 2; i++) {
str = str + str1.charAt(i);
}
str = str + last + l;
return str;
}
}
问题在于我的测试用例,有什么帮助吗?
Testcase Pass/Fail Parameters Actual Output Expected Output
1 pass 'aabbccdd' aabbccdd aabbccdd
2 fail 'A' null A
3 pass 'hello' helol helol
答案 0 :(得分:1)
如果你通过&#34; A&#34;您将获得StringIndexOutOfBoundsException而不是null。除非你在catch子句中禁止它并返回null。
快速修复。将长度检查移动到方法的开头。这应该可以解决你的问题。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
Endpoint.publish("http://localhost:8888/ws/send", new SendServiceImpl());
Endpoint.publish("http://localhost:8888/ws/send23", new SendServiceImpl());
}
}
答案 1 :(得分:0)
您应该在功能开始时检查长度。
(-number*0.1)
答案 2 :(得分:0)
我知道这已经得到了解答,但我觉得使用StringBuilder
可以简化OP交换方法:
public static String swap(String word) {
//Answer by Syam
if (word == null || word.length() < 2) {
return word;
}
//Create new StringBuilder
StringBuilder s = new StringBuilder(word);
//Get second last char
char c = s.charAt(s.length() - 2);
//Replace second last char with last char
s.setCharAt(s.length() - 2, s.charAt(s.length() - 1));
//replace last char with stored char
s.setCharAt(s.length() - 1, c);
return s.toString();
}
执行命令
System.out.println(swap("aabbccdd"));
System.out.println(swap("A"));
System.out.println(swap("hello"));
输出:
aabbccdd
A
helol
这是why