java - 为什么这段代码没有产生预期的结果?

标签 java for-loop concatenation

以下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", "")。您需要在实际连接字符串之前做一些事情。


如果满足以下所有条件,则需要删除一个角色:

  1. a 是非空的
  2. b 非空
  3. 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/

相关文章:

java - 在对话框内的 editText 中隐藏键盘

javascript简单循环计算

mysql - 明智地在mysql记录中连接字符串

excel - 如何根据标准连接单元格范围

java - Checkstyle 多文件 SuppressionFilter

java - 如果他的列表满足条件,如何使用 Collection remove?

java - 安卓UDP通信

r - 使用 for 循环进行控制和处理匹配比较

python - 如何使列表中的项目永远运行 - python

audio - 使用 ffmpeg 连接音频文件