Advertisement
teaowl

LetterExchengerFull

Nov 21st, 2018
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.43 KB | None | 0 0
  1. import javax.swing.JOptionPane;
  2.  
  3. public class LetterExchanger {
  4.  
  5.     // немножко кода для тестирования, нужную функцию раскомментировать
  6.     public static void main(String[] args) {
  7.         LetterExchanger exchenger = new LetterExchanger();
  8.         String demonstrationString = JOptionPane.showInputDialog("Введите строку:");
  9.         String outputString = exchenger.lowerWithDotToUpper(demonstrationString);
  10.         // String outputString = exchenger.toLowerWithDot(demonstrationString);
  11.         JOptionPane.showMessageDialog(null, outputString);
  12.     }
  13.  
  14.     /** Этот метод меняет все большие буквы на маленькие с точкой */
  15.     String toLowerWithDot(String inputString) {
  16.         // StringBuilder просто быстрее работает, можно использовать и просто String
  17.         StringBuilder outputBuilder = new StringBuilder();
  18.         // Разбиваем строку на массив символов
  19.         char[] lettersArray = inputString.toCharArray();
  20.         for (int i = 0; i < lettersArray.length; i++) {
  21.             // Если символ в верхнем регистре..
  22.             if (Character.isUpperCase(lettersArray[i])) {
  23.                 // добавляем его в результирующую строку, но с точкой, и в нижнем регистре
  24.                 outputBuilder.append("." + Character.toLowerCase(lettersArray[i]));
  25.             } else {
  26.                 // (а если нет, то просто добавляем)
  27.                 outputBuilder.append(lettersArray[i]);
  28.             }
  29.         }
  30.         return outputBuilder.toString();
  31.     }
  32.  
  33.    
  34.     // флаг пропуска итерации
  35.     boolean skipNextStep = false;
  36.  
  37.     /** Этот метод меняет маленькие с точкой буквы на большие */
  38.     String lowerWithDotToUpper(String inputString) {
  39.         // StringBuilder как элемент оптимизации
  40.         StringBuilder outputBuilder = new StringBuilder();
  41.         char[] lettersArray = inputString.toCharArray();
  42.         for (int i = 0; i < lettersArray.length; i++) {
  43.             /*
  44.              * точка и маленькая буква - это два символа, и когда они сливаются в один
  45.              * (большая буква), следующая итерация становится бессмысленной, и её можно
  46.              * пропустить
  47.              */
  48.             if (skipNextStep) {
  49.                 skipNextStep = false;
  50.                 continue;// пропускаем
  51.             }
  52.             // как только обнаружена точка, и за ней маленькая буква, (и это не конец
  53.             // предложения, а то вообще будет NPE)
  54.             // то этот и следующий символ сливаются в большую букву
  55.             // p.s. кстати, использовать "==" в таком случае вполне правильно, ибо char -
  56.             // это разновидность числа, и не нуждается в equals(), в отличие от String
  57.             if (lettersArray[i] == '.' && (i + 1 < lettersArray.length) && Character.isLowerCase(lettersArray[i + 1])) {
  58.                 outputBuilder.append(Character.toUpperCase(lettersArray[i + 1]));
  59.                 skipNextStep = true;
  60.             } else {
  61.                 // в случае провала любого из условий, символ просто добавляется в строку
  62.                 outputBuilder.append(lettersArray[i]);
  63.             }
  64.         }
  65.         return outputBuilder.toString();
  66.     }
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement