java - 我在这个方法中做错了什么? (使用 StringBuilder 从 4 个字符串创建一个新单词)

标签 java

我应该在我的主要方法中从扫描仪中获取 4 个字符串(s1、s2、s3 和 s4——主要方法在测试后完美运行)并调用:

--> concat(s1, s2, s3, s4);

方法名称 concat 可能会产生误导,因为我不仅仅想要 s1+s2+s3+s4。我真正需要的是从 s1 开始,然后添加 s2s3s4 中的字符尚未出现在结果 String 中。例如,如果s1是“drain”,s2是“dane”,则处理s2后的部分结果将是“drain”,因为dan 已存在于结果 String 中。

方法如下:

public static void concat(String s1, String s2, String s3, String s4) {

      String str;
      StringBuilder createdWord = new StringBuilder();      

      for (int i = 0; i < s1.length(); i++) {
         char c = s1.charAt(i);
         for (int j = 0; j < createdWord.length(); j++) {
            if (createdWord.charAt(j) != c)
               createdWord.append(c);             
         }                  
      }

      for (int i = 0; i < s2.length(); i++) {
         char c = s2.charAt(i);
         for (int j = 0; j < createdWord.length(); j++) {
            if (createdWord.charAt(j) != c)
               createdWord.append(c);             
         }         
      }

      for (int i = 0; i < s3.length(); i++) {
         char c = s3.charAt(i);
         for (int j = 0; j < createdWord.length(); j++) {
            if (createdWord.charAt(j) != c)
               createdWord.append(c);             
         }         
      }

      for (int i = 0; i < s4.length(); i++) {
         char c = s4.charAt(i);
         for (int j = 0; j < createdWord.length(); j++) {
            if (createdWord.charAt(j) != c)
               createdWord.append(c);             
         }         
      }

      str = createdWord.toString();
      System.out.println(str);

   }

当我尝试打印 (str) 时,我得到空白输出。我确信有一种方法可以让这件事变得更简单。

我会接受基于清晰、简单和/或更简单的解决方案的答案。提前致谢!

最佳答案

问题出在有 for 循环的行中:

for (int j = 0; j < createdWord.length(); j++)

由于createdWord刚刚初始化,它的长度为零(0),因此createdWord.length() = 0并且永远不会到达for循环内的代码。 您应该尝试解决这个问题。

编辑 这就是我如何简单地重构 concat 方法。我还提供了一个主弦和 4 个弦来进行测试。根据OP评论,预期的系统输出将是“drainemv”

public static void main(String[] args) {
    String str1 = "drain";
    String str2 = "dane";
    String str3 = "main";
    String str4 = "vain";

    concat(str1, str2, str3, str4);

}
public static void concat(String s1, String s2, String s3, String s4) {

    String str;
    StringBuilder createdWord = new StringBuilder();

    for (int i = 0; i < s1.length(); i++) {
        char c = s1.charAt(i);
        if(createdWord.length() ==0) {
            createdWord.append(c);
        } else if (!createdWord.toString().contains(String.valueOf(c))){
            createdWord.append(c);
        }

    }

    for (int i = 0; i < s2.length(); i++) {
        char c = s2.charAt(i);
        if(createdWord.length() ==0) {
            createdWord.append(c);
        } else if (!createdWord.toString().contains(String.valueOf(c))){
            createdWord.append(c);
        }

    }

    for (int i = 0; i < s3.length(); i++) {
        char c = s3.charAt(i);
        if(createdWord.length() ==0) {
            createdWord.append(c);
        } else if (!createdWord.toString().contains(String.valueOf(c))){
            createdWord.append(c);
        }

    }

    for (int i = 0; i < s4.length(); i++) {
        char c = s4.charAt(i);
        if(createdWord.length() ==0) {
            createdWord.append(c);
        } else if (!createdWord.toString().contains(String.valueOf(c))){
            createdWord.append(c);
        }

    }


    str = createdWord.toString();
    System.out.println(str);

}

关于java - 我在这个方法中做错了什么? (使用 StringBuilder 从 4 个字符串创建一个新单词),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34909837/

相关文章:

java - Camunda 服务任务的 OptimisticLockingException

java - 如果可以控制两端,Java 的开发版本和部署版本是否应该相同?

java - jOOQ - 选择查询数组

java - java中子类是否继承父类的私有(private)属性?

java - log4j 性能

java - if ((i = fis.read()) != -1) 在这个程序中到底是什么意思?

java - 为什么实现 Serializable 的对象的序列化会抛出异常?

java - 从我的响应数据中获取特定的字符串值

Jtextfield 的 Java Swing 圆形边框

Java代码读取网站内容