Метод конкатенации 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;
}
Вот некоторые из требований:
- Если оба str1 и str2 равны null, метод возвращает null
- Если str1 или str2 имеет значение null, он просто вернет не null String
- Если str1 и str2 не являются нулевыми, они объединяют их
- Он никогда не добавляет "null" к результату
Может ли кто-нибудь сделать это с меньшим количеством кода?
Ответы
Ответ 1
Конечно:
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
.
Ответ 2
Использование только простых 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;
}
Ответ 3
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"
Ответ 4
Кажется, что все пропустили условие 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;
}
Ответ 5
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;
}
}