Проблемы с преобразованием строки в аббревиатуру
Я работаю над методом, который получает в качестве входных данных массив строк и возвращает массив его сокращений, которые являются только заглавными буквами.
Например:
[United Nations, United Federation of Planets, null, , ignore me] -> [UN, UFP, null, , ]
По какой-то причине мой код ничего не возвращает, а также показывает, что нулевая проверка - это мертвый код, и я не могу понять, почему.
public static String[] convertStringsToAcronyms(String[] input)
{
int itemCount = input.length;
String[] result = new String[itemCount];
int k = 0;
for (String words : input) {
boolean checklowercase = words.toLowerCase().equals(words);
if (checklowercase || (words == ""))
result[k] = "";
if (words == null)
result[k] = null;
String add = "";
String[] ary = words.split("");
for (String letter : ary) {
char firstletter = letter.charAt(0);
if (Character.isUpperCase(firstletter))
add = add + firstletter;
}
result[k] = add;
k++;
add = "";
}
return result;
}
3 ответа
Я думаю, что это будет делать то, что вы ищете немного более элегантно.
public static sampleAcronymMethod()
{
String[] arr = {"United Nations", "United Federation of Planets"};
for (String element : arr) //go through all of our entries we wish to generate acronyms for
{
String[] splits = element.split("[a-z]+");//remove all lowercase letters via regular expression
String acronym = "";//start with an empty acronym
for (String split : splits)//go through our uppercase letters for our current array entry in arr
acronym = acronym + split;//tack them together
acronym = acronym.replaceAll("\\s","");//remove whitespace
System.out.println("Acronym for " + element + " is " + acronym);
}
}
Нулевая проверка - мертвый код, потому что перед этим вы получаете доступ к words
переменная, так что если она равна нулю, вы получите NullPointerException
до нулевой проверки.
boolean checklowercase = words.toLowerCase().equals(words);
....
if (words == null) // this can never be true
result[k] = null; // this is dead code
Еще более элегантный в Java 1.8
String[] i = new String[] {"United Nations", "United Federation of Planets", null, "", "ignore me"};
String[] array = Arrays.stream(i)
.filter(it -> it != null && !it.isEmpty())
.map(it -> it.split(" "))
.map(words -> Arrays.stream(words)
.map(w -> w.substring(0, 1))
.filter(l -> l.toUpperCase().equals(l))
.collect(Collectors.joining()))
.toArray(String[]::new);
System.out.println(Arrays.toString(array));