Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.swing.JOptionPane;
- public class LetterExchanger {
- // немножко кода для тестирования, нужную функцию раскомментировать
- public static void main(String[] args) {
- LetterExchanger exchenger = new LetterExchanger();
- String demonstrationString = JOptionPane.showInputDialog("Введите строку:");
- String outputString = exchenger.lowerWithDotToUpper(demonstrationString);
- // String outputString = exchenger.toLowerWithDot(demonstrationString);
- JOptionPane.showMessageDialog(null, outputString);
- }
- /** Этот метод меняет все большие буквы на маленькие с точкой */
- String toLowerWithDot(String inputString) {
- // StringBuilder просто быстрее работает, можно использовать и просто String
- StringBuilder outputBuilder = new StringBuilder();
- // Разбиваем строку на массив символов
- char[] lettersArray = inputString.toCharArray();
- for (int i = 0; i < lettersArray.length; i++) {
- // Если символ в верхнем регистре..
- if (Character.isUpperCase(lettersArray[i])) {
- // добавляем его в результирующую строку, но с точкой, и в нижнем регистре
- outputBuilder.append("." + Character.toLowerCase(lettersArray[i]));
- } else {
- // (а если нет, то просто добавляем)
- outputBuilder.append(lettersArray[i]);
- }
- }
- return outputBuilder.toString();
- }
- // флаг пропуска итерации
- boolean skipNextStep = false;
- /** Этот метод меняет маленькие с точкой буквы на большие */
- String lowerWithDotToUpper(String inputString) {
- // StringBuilder как элемент оптимизации
- StringBuilder outputBuilder = new StringBuilder();
- char[] lettersArray = inputString.toCharArray();
- for (int i = 0; i < lettersArray.length; i++) {
- /*
- * точка и маленькая буква - это два символа, и когда они сливаются в один
- * (большая буква), следующая итерация становится бессмысленной, и её можно
- * пропустить
- */
- if (skipNextStep) {
- skipNextStep = false;
- continue;// пропускаем
- }
- // как только обнаружена точка, и за ней маленькая буква, (и это не конец
- // предложения, а то вообще будет NPE)
- // то этот и следующий символ сливаются в большую букву
- // p.s. кстати, использовать "==" в таком случае вполне правильно, ибо char -
- // это разновидность числа, и не нуждается в equals(), в отличие от String
- if (lettersArray[i] == '.' && (i + 1 < lettersArray.length) && Character.isLowerCase(lettersArray[i + 1])) {
- outputBuilder.append(Character.toUpperCase(lettersArray[i + 1]));
- skipNextStep = true;
- } else {
- // в случае провала любого из условий, символ просто добавляется в строку
- outputBuilder.append(lettersArray[i]);
- }
- }
- return outputBuilder.toString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement