用Java连接2个字符串的方法

时间:2010-03-17 13:24:32

标签: java string refactoring concatenation

我在Java中有一个连接2个字符串的方法。它目前工作正常,但我认为它可以写得更好。

public static String concat(String str1, String str2) {
  String rVal = null;
  if (str1 != null || str2 != null) {
    rVal = "";
    if (str1 != null) {
      rVal += str1;
    }
    if (str2 != null) {
      rVal += str2;
    }      
  }    
  return rVal;
}

以下是一些要求:

  1. 如果str1和str2都为null,则该方法返回null
  2. 如果str1或str2为null,则只返回not null String
  3. 如果str1和str2不为null,则会将它们连接起来
  4. 它永远不会在结果中添加“null”
  5. 任何人都可以用更少的代码来做这件事吗?

5 个答案:

答案 0 :(得分:15)

仅使用普通if子句:

public static String concat(String str1, String str2) {
    if(str1==null) return str2;
    if(str2==null) return str1;
    return str1 + str2;
}

或者,如果你对括号有着深深的热爱:

public static String concat(String str1, String str2) {
    if(str1==null)
    { 
        return str2;
    }
    if(str2==null) 
    {
        return str1;
    }
    return str1 + str2;
}

答案 1 :(得分:13)

不确定

public static String concat(String str1, String str2) {
  return str1 == null ? str2
      : str2 == null ? str1
      : str1 + str2;
}

请注意,这会在第一个条件中处理“both null”的情况:如果str1为null,那么您要么返回null(如果str2为null)或{{1 (如果str2不为null) - 只需返回str2即可处理这两种情况。

答案 2 :(得分:1)

import org.apache.commons.lang.StringUtils;

StringUtils.join([str1, str2]);

将提供的数组的元素连接到包含提供的元素列表的单个String中。

未在连接的String中添加分隔符。数组中的空对象或空字符串由空字符串表示。

 StringUtils.join(null)            = null
 StringUtils.join([])              = ""
 StringUtils.join([null])          = ""
 StringUtils.join(["a", "b", "c"]) = "abc"
 StringUtils.join([null, "", "a"]) = "a"

答案 3 :(得分:0)

每个人似乎都错过了条件1,如果两个字符串都为null,则返回null。最简单的阅读版本(IMO)随后变为:

public static String concat(String str1, String str2) {  
    if(str1==null && str2==null) return null;  
    if(str1==null) return str2;  
    if(str2==null) return str1;  
    return str1 + str2;  
}

答案 4 :(得分:0)

public class ConcatTest extends TestCase {

    // 1. If both str1 and str2 are null, the method returns null
    public void testBothNull() throws Exception {
        assertNull(concat(null, null));
    }

    // 2. If either str1 or str2 is null, it will just return the not null
    // String
    public void testOneNull() throws Exception {
        assertEquals("a", concat(null, "a"));
        assertEquals("b", concat("b", null));
    }

    // 3. If str1 and str2 are not null, it will concatenate them
    public void testNonNull() throws Exception {
        assertEquals("ab", concat("a", "b"));
    }

    // 4. It never adds "null" to the result (not really testable)

    public static String concat(String a, String b) {
        if (a == null && b == null)
            return null;
        return denulled(a) + denulled(b);
    }

    private static String denulled(String s) {
        return s == null ? "" : s;
    }

}