【问题标题】:junit core java reverse string test casesjunit core java反向字符串测试用例
【发布时间】:2021-09-12 10:03:01
【问题描述】:

谁能告诉我如何在下面的代码中编写测试用例

public static String reverseWord(String str) {   
    String a[] = str.split(" ");
    
    try {
        for (int i = a.length - 1; i >= 0; i--) {
            System.out.print(a[i] + " ");
        }
    
    } catch (Exception e) {
        e.printStackTrace();
    }
    return str;
}

我已经写了下面的测试用例,但是失败了

@Test
public void testReverseWord() {
    assertEquals("world hello", Logic.reverseWord("hello world"));   
}

【问题讨论】:

  • 你的 reverseWord 方法没有改变返回值str,而不是打印数组,而是创建一个新的字符串实例并将其添加到那里
  • @Bahij.Mik 我不明白你在说什么,你能在代码中告诉我吗?

标签: java string junit reverse


【解决方案1】:

您返回的字符串与作为参数的字符串完全相同,所做的更改将打印到控制台而不是返回。

试试这个代码。我正在创建用于字符串连接的 StringBuilder(您可以在此处阅读更多信息https://docs.oracle.com/javase/tutorial/java/data/buffers.html)。请注意,我仅在它不是最后一个单词时才添加空格 - 这样您返回的字符串末尾就没有空格。最后,通过在 StringBuilder 对象上调用 toString(),我将返回新的反转字符串,这正是您想要的。

public static String reverseWord(String str) {

    String a[] = str.split(" ");

    StringBuilder builder = new StringBuilder();
    try {

        for (int i = a.length - 1; i >= 0; i--) {

            builder.append(a[i]);

            if (i != 0) {
                builder.append(" ");
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return builder.toString();
}

【讨论】:

    【解决方案2】:

    您的测试用例是正确的,但方法本身是错误的,您正在拆分字符串然后只是打印出值而不是创建一个新字符串并将这些值连接在那里,所以而不是System.out.print(a[i] + " "); 在外部引入一个新字符串循环 String result = "" 并连接值:

            String a[] = str.split(" ");
            String result = "";
    
            for (int i = a.length - 1; i >= 0; i--) {
                    result += a[i];
                    if (i != 0)
                      result += " ";
                }
    
            return result;
    

    更优化的方法是使用StringBuilder,因为每次附加到字符串时字符串都是不可变的,因此会创建一个新实例 - 也不需要 try-catch 块

    【讨论】:

      【解决方案3】:

      你的函数返回相同的输入,所以你需要修改它,你可以很容易地使用 StringBuilder 类

      public static String reverseWord(String str) {
          String[] words = str.split(" ");
          StringBuilder builder = new StringBuilder(str.length());
          for (int i = words.length - 1; i >= 0; i--) {
              builder.append(words[i]).append(" ");
          }
          return builder.toString().trim();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-04
        • 1970-01-01
        • 2011-01-31
        • 1970-01-01
        • 1970-01-01
        • 2013-04-08
        相关资源
        最近更新 更多