Мне необходимо ограничить количество символов в строке после '.' до 6.
К примеру, из "0.123456789" получить "0.123456".
Можно ли решить данную задачу используя Stream API?
Императивное решение у меня получилось такое:
static String f(String s) {
if (s.contains(".")) {
String dec = s.substring(s.indexOf('.'), s.length());
if (dec.length() < 7)
return s;
else {
String i = s.substring(0, s.indexOf('.'));
return i + dec.substring(0, 7);
}
}
else {
return s;
}
}
Решение с использованием indexOf и substring можно укоротить:
public static String f(String str)
{
final int maxCount = 6;
int index = str.indexOf('.') + maxCount + 1;
if (index == maxCount || index >= str.length())
{
return str;
}
return str.substring(0, index);
}
if и 2 return-a можно записать ещё короче:
return (index == maxCount || index >= str.length()) ? str : str.substring(0, index);
но это уже "на любителя", так как выражение получается достаточно длинное.
Добавить Stream символов строки, получаемый с помощью метода chars, сюда можно, однако дабы это не получилось сверхсложно и сверхкостыльно, высчитывание индекса и возврат str если символов после . меньше 6 придётся оставить вне потока. В результате, по сути, просто код str.substring(0, index) превращается в несколько строк кода:
public static String f(String str)
{
final int maxCount = 6;
int index = str.indexOf('.') + maxCount + 1;
if (index == maxCount || index >= str.length())
{
return str;
}
return str.chars()
.limit(index)
.collect(StringBuilder::new, StringBuilder::appendCodePoint, StringBuilder::append)
.toString();
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости