Это то, что устанавливает вашу строку обратно пустой:
st = "";
Таким образом, она должна быть во внешней else
, а не во внутренней, в противном случае вы устанавливаете ее как пустую, только когда находите новую(не повторяется) слово.Это сделает следующее слово объединенным с предыдущим.
Что касается второй части, вы можете сделать что-то вроде
if ( Character.isLetterOrDigit(i) || (st != "" && (char)i == '.') ) {
st += (char)i;
}
Редактировать:
А затем, чтобы удалить последний период, просто проверьте, является ли последний символ st
периодом, когда он попадает в else
.
Другое редактирование:
Если вы хотите ровно одну букву перед каждым периодом, вы можете проверить строку st
в обратном направлении в if
.Или просто обработайте его после разделения, в else
.Или даже используйте Регулярные выражения .
Как вы реализуете это зависит от вас.