Метод для конкатенации 2 Строк в Java

У меня есть метод в 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 являются пустыми, пустой указатель возвратов метода
  2. Если или str1 или str2 будут пустыми, то он просто возвратит не пустую строку
  3. Если str1 и str2 не будут пустыми, то он свяжет их
  4. Это никогда не добавляет "пустой указатель" к результату

Кто-либо может сделать это с меньшим количеством кода?

11
задан Ryan 17 March 2010 в 13:24
поделиться

5 ответов

Конечно:

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

Примечание что это учитывает случай «оба нуль» в первом условии: если str1 имеет значение NULL, то вы либо хотите вернуть значение NULL (если str2 имеет значение NULL), либо str2 (если str2 не равно нулю) - оба из них обрабатываются путем простого возврата str2 .

13
ответ дан 3 December 2019 в 03:04
поделиться
import org.apache.commons.lang.StringUtils;

StringUtils.join([str1, str2]);

Объединяет элементы предоставленного массива в одну строку, содержащую предоставленный список элементов.

К объединенной строке не добавляется разделитель. Нулевые объекты или пустые строки в массиве представлены пустыми строками.

 StringUtils.join(null)            = null
 StringUtils.join([])              = ""
 StringUtils.join([null])          = ""
 StringUtils.join(["a", "b", "c"]) = "abc"
 StringUtils.join([null, "", "a"]) = "a"
1
ответ дан 3 December 2019 в 03:04
поделиться

Кажется, все пропустили условие 1, когда, если обе строки равны нулю, возвращается ноль. Самая простая версия для чтения (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;  
}
0
ответ дан 3 December 2019 в 03:04
поделиться

Использование только простых 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;
}
15
ответ дан 3 December 2019 в 03:04
поделиться
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;
    }

}
0
ответ дан 3 December 2019 в 03:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: