以下java题题出自http://codingbat.com/prob/p132118 :
给定两个字符串,将它们附加在一起(称为“连接”)并返回结果。但是,如果串联创建一个双字符,则省略其中一个字符,因此“abc”和“cat”会生成“abcat”。即:
conCat("abc", "cat") → "abcat"
conCat("dog", "cat") → "dogcat"
conCat("abc", "") → "abc"
这是我制定的解决方案:
public String conCat(String a, String b) {
String result = a + b;
String r = "";
String f = "";
for(int i= 0; i < result.length(); i++)
{
f = Character.toString(result.charAt(i));
if(!( f.equals(result.charAt(i))) )
r += f;
}
return r;
}
我的问题是 - 导致我的代码将“ab”+“bc”连接到“abbc”而不是“abc”的逻辑缺陷在哪里?
最佳答案
您得到 a + b
的结果是因为您将字符串 f
与字符 result.charAt(i)
进行比较>。它们永远不相等,因为它们属于不同类型,所以 r += f;
无条件执行。
即使您纠正了这个问题,您的方法也不会奏效,因为您已经连接了字符串:您无法分辨连接之间的区别,例如conCat("ab", "bc")
与 conCat("abbc", "")
。您需要在实际连接字符串之前做一些事情。
如果满足以下所有条件,则需要删除一个角色:
a
是非空的b
非空a
的最后一个字符等于b
的第一个字符。
在这种情况下,只需在连接之前砍掉 b
的第一个字符。否则,只需按原样连接字符串。
public String conCat(String a, String b) {
if (!a.isEmpty() && !b.isEmpty() && a.charAt(a.length() - 1) == b.charAt(0)) {
return a + b.substring(1);
} else {
return a + b;
}
}
关于java - 为什么这段代码没有产生预期的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36397787/