Задачі на рядки

1. Дан рядок. Вивести його три рази через кому і показати кількість символів в ньому.
Відповідь:
import java.util.Scanner;

public class TStr1 {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer s=new StringBuffer(in.next());
        StringBuffer s2=new StringBuffer();
        s2.append(s+", "+s+", "+s);
        System.out.println("s="+s2+"\nДовжина "+s2.length());
    }
}
2. Дан рядок. Вивести перший, останній і середній (якщо він є) символи.
Відповідь:
import java.util.Scanner;

public class TStr2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.next());
        System.out.println("Перший ->" + sb.charAt(0));
        System.out.println("Останній ->" + sb.charAt(sb.length() - 1));
        if (sb.length() % 2 == 1) {
            System.out.println("Середній ->" + sb.charAt(sb.length() / 2 ));
        } else {
            System.out.println("Середній відсутній");
        }
    }
}


3. Дан рядок. Вивести перші три символи і останні три символи, якщо довжина рядка більше 5. Інакше вивести перший символ стільки раз, яка довжина рядка.
Відповідь:
import java.util.Scanner;

public class TStr3 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.next());
        if (sb.length() > 5) {
            System.out.print("Перші 3 ->");
            for (int i = 0; i < 3; i++) {
                System.out.print(sb.charAt(i) + " ");
            }

            System.out.print("\nОстанні 3 ->");
            for (int i = sb.length() - 3; i < sb.length(); i++) {
                System.out.print(sb.charAt(i) + " ");
            }
        } else {
            for (int i = 0; i < sb.length(); i++) {
                System.out.print(sb.charAt(0) + " ");
            }
        }
    }
}

4. Дан рядок. Замінити символи на парних місцях парними числами, непарні символи залишити без змін.
Відповідь:
import java.util.Random;
import java.util.Scanner;

public class TStr4 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(sc.next());
        StringBuffer sb2 = new StringBuffer();
        if (sb.length() % 2 == 0) {
            for (int i = 0; i < sb.length(); i += 2) {
                sb2.append(sb.charAt(i)).append(evenNumber());
            }
        } else if (sb.length() == 1) {
            sb2 = sb;
        } else {
            for (int i = 0; i < sb.length() - 1; i += 2) {
                sb2.append(sb.charAt(i)).append(evenNumber());
            }
            sb2.append(sb.charAt(sb.length() - 1));
        }
        System.out.println(sb2);
    }

    static int evenNumber() {
        Random random = new Random();
        int number = random.nextInt(100);
        if (number % 2 == 1) {
            number++;
        }
        return number;
    }
}


5. Дан рядок. Показати номери символів, які збігаються з останнім символом рядка.
Відповідь:
import java.util.Scanner;

public class TStr5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(sc.nextLine());
        char ch = sb.charAt(sb.length() - 1);
        boolean flag = true;
        for (int i = 0; i < sb.length() - 1; i++) {
            if (ch == sb.charAt(i)) {
                System.out.print(i + 1 + " ");
                flag = false;
            }
        }
        if (flag) {
            System.out.println("Співпадіння відсутні");
        }
    }
}


6. Дан рядок. Показати третій, шостий, дев'ятий і так далі символи.
Відповідь:
import java.util.Scanner;

public class TStr6 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(sc.nextLine());
        if (sb.length() > 2) {
            for (int i = 2; i < sb.length(); i += 3) {
                System.out.println(i + 1 + "->" + sb.charAt(i));
            }
        } else {
            System.out.println("Символів меньше 3");
        }
    }
}

7. Дан рядок. Визначте загальну кількість символів '+' і '-' в ніому. А так же скільки таких символів, після яких слід цифра нуль.
Відповідь:
import java.util.Scanner;

public class TStr7 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(sc.nextLine());
        sb.append(" ");
        int conunt = 0;
        int conuntZero = 0;
        char ch;
        for (int i = 0; i < sb.length() - 1; i++) {
            ch = sb.charAt(i);
            if (ch == '+' || ch == '-') {
                conunt++;
                if (sb.charAt(i + 1) == '0') {
                    conuntZero++;
                }
            }
        }
        System.out.println("Кількість + та - =" + conunt);
        System.out.println("За ними 0-ів " + conuntZero);
    }
}


8. Дан рядок. Визначте, який символ в ній зустрічається раніше: 'x' або 'w'. Якщо якогось із символів немає, вивести повідомлення про це.
Відповідь:
import java.util.Scanner;

public class TStr8 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(sc.nextLine());
        int posX = sb.indexOf("x");
        int posW = sb.indexOf("w");
        if (posX == -1 && posW == -1) {
            System.out.println("Символи x i w відсутні");
        } else if (posX == -1) {
            System.out.println("x відсутній");
        } else if (posW == -1) {
            System.out.println("w відсутній");
        } else if (posX < posW) {
            System.out.println("Першим зустрічається х");
        } else {
            System.out.println("Першим зустрічається w");
        }
    }
}

9. Дано два рядки. Вивести більший по довжині рядок стільки раз, на скільки символів відрізняються рядки.
Відповідь:
import java.util.Scanner;

public class TStr9 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Рядок 1->");
        StringBuffer sb1 = new StringBuffer(sc.nextLine());
        System.out.print("Рядок 2->");
        StringBuffer sb2 = new StringBuffer(sc.nextLine());
        if (sb1.length() == sb2.length()) {
            System.out.println("Довжини рядків рівні");
        } else if (sb1.length() > sb2.length()) {
            for (int i = 0; i < sb1.length() - sb2.length(); i++) {
                System.out.println(sb1);
            }
        } else {
            for (int i = 0; i < sb2.length() - sb1.length(); i++) {
                System.out.println(sb2);
            }
        }
    }
}


10. Дан рядок. Якщо він починається на 'abc', то замінити їх на 'www', інакше додати в кінець рядка 'zzz'.
Відповідь:
import java.util.Scanner;

public class TStr10 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(sc.nextLine());
        if (sb.length() < 3) {
            System.out.println("Довжина рядка повинна бути більше 2-х символів");
        } else if (sb.indexOf("abc") == 0) {
            sb.setCharAt(0, 'w');
            sb.setCharAt(1, 'w');
            sb.setCharAt(2, 'w');
            System.out.println(sb);
        } else {
            sb.append("zzz");
            System.out.println(sb);
        }
    }


11. Дан рядок. Якщо його довжина більше 10, то залишити в рядку тільки перші 6 символів, інакше доповнити рядок символами 'o' до довжини 12.
Відповідь:
import java.util.Scanner;

public class TStr11 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(sc.nextLine());
        if (sb.length() > 10) {
            sb.setLength(6);
        } else {
            for (int i = 0, n = sb.length(); i < 12 - n; i++) {
                sb.append('o');
            }
        }
        System.out.println(sb);
    }
}


12. Дан рядок. Розділити рядок на фрагменти по три поспіль символыв. У кожному фрагменті середній символ замінити на випадковий символ, який не збігається ні з одним з символів цього фрагмента. Показати фрагменти, впорядковані за алфавітом.
Відповідь:

13. Дан рядок. Замінити кожен парний символ або на 'a', якщо символ НЕ дорівнює 'a' або 'b', або на 'c' в іншому випадку.
Відповідь:
14. У рядку знайти кількість цифр.
Відповідь:
import java.util.Scanner;

public class TStr14 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.nextLine());
        int countNumeric = 0;
        for (int i = 0; i < sb.length(); i++) {
            if (sb.charAt(i) >= 48 && sb.charAt(i) <= 57) {
                countNumeric++;
            }
        }
        System.out.println("Цифр в рядку " + countNumeric);
    }
}
15. Дан рядок. Визначити, чи містить рядок тільки символи 'a', 'b', 'c' чи ні.
Відповідь:
import java.util.Scanner;

public class TStr15 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.nextLine());
        char ch;
        for (int i = 0; i < sb.length(); i++) {
            ch = sb.charAt(i);
            if (ch != 'a' && ch != 'b' && ch != 'c') {
                System.out.println("В рядку присутні символи окрім 'a, b, c'");
                System.exit(0);
            }
        }
        System.out.println("Рядок складається тільки з символів 'a, b, c'");
    }
}


16. Замініть в рядку всі входження 'word' на 'letter'.
Відповідь:
import java.util.Scanner;

public class TStr16 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.nextLine());
        while (sb.indexOf("word") != -1) {
            int start = sb.indexOf("word");
            sb.replace(start, start + 4, "leter");
        }
        System.out.println(sb);
    }
}

17. Видаліть в рядку всі літери 'x', за якими слідує 'abc'.
Відповідь:
import java.util.Scanner;

public class TStr17 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.nextLine());
        for (int i = 0; i < sb.length() - 3; i++) {
            if (sb.charAt(i) == 'x' && sb.charAt(i + 1) == 'a'
                    && sb.charAt(i + 2) == 'b' && sb.charAt(i + 3) == 'c')
                sb.delete(i, i + 1);
        }
        System.out.println("Новий рядок ->"+sb);

    }
}

18. Видаліть в рядку всi 'abc', за якими слідує цифра.
Відповідь:
import java.util.Scanner;

public class TStr18 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.nextLine());
        for (int i = 0; i < sb.length() - 3; i++) {
            if (sb.charAt(i) == 'a' &&
                    sb.charAt(i + 1) == 'b' &&
                    sb.charAt(i + 2) == 'c' &&
                    sb.charAt(i + 3) >= 48  &&
                    sb.charAt(i + 3) <= 57)
                sb.delete(i, i + 3);
        }
        System.out.println("Новий рядок ->" + sb);
    }
}



19. Знайдіть кількість входження 'aba' в рядок.
Відповідь:
import java.util.Scanner;

public class TStr19 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.nextLine());
        int count = 0;
        for (int i = 0; i < sb.length() - 2; i++) {
            if (sb.charAt(i) == 'a' &&
                    sb.charAt(i + 1) == 'b' &&
                    sb.charAt(i + 2) == 'a') {
                count++;
            }
        }
        System.out.println("Кількість входжень 'aba' ->" + count);
    }
}


20. Видалити в рядку всі зайві пробіли, тобто серії з декількох пробілів замінити на один пробіл. Крайні пробіли в рядку видалити.
Відповідь:
import java.util.Scanner;

public class TStr20 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        String s = in.nextLine();
        System.out.println("Початкова довжина ->" + s.length());
        s.trim();
        StringBuffer sb = new StringBuffer(s);
        while (sb.indexOf("  ") != -1) {
            int start = sb.indexOf("  ");
            sb.delete(start, start + 1);
        }
        System.out.println("Новий рядок ->" + sb);
        System.out.println("Кінцева довжина ->" + sb.length());
        System.out.println("Видалено " + (s.length() - sb.length()));
    }
}



21. Дан рядок, що складається з слів, розділених символами, які перераховані у другому рядку. Показати всі слова.
Відповідь:
000000000000000000000000000

22. Дан рядок. Знайдіть найбільшу кількість цифр, які йдуть підряд.
Відповідь:
import java.util.Scanner;

public class TStr22 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.nextLine());
        sb.append(" ");
        int maxSize = 0;
        int count = 0;
        while (sb.length() > 0) {
            if (sb.charAt(0) < 48 || sb.charAt(0) > 57) {
                sb.deleteCharAt(0);
                if (count > maxSize) {
                    maxSize = count;
                    count = 0;
                }
            } else {
                count++;
                sb.deleteCharAt(0);
            }
        }
        System.out.println("Максимальна кількість цифр ->" + maxSize);
    }
}
23. Дан рядок. Знайти суму наявних в ньому цифр.
Відповідь:
import java.util.Scanner;

public class TStr23 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.nextLine());
        int sum = 0;
        for (int i = 0; i < sb.length(); i++) {
            if (sb.charAt(i) >= 49 && sb.charAt(i) <= 57) {
                sum += sb.charAt(i) - 48;
            }
        }
        System.out.println("Сума =" + sum);
    }
}


24. Дан рядок. Знайти слова, що складаються з цифр, і суму чисел, які утворюють ці слова.
Відповідь:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TStr24 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок->");
        String s = in.nextLine();
        Pattern pattern = Pattern.compile("\\b\\d+\\b");
        Matcher matcher = pattern.matcher(s);
        long sum = 0;
        while (matcher.find()) {
            System.out.println(matcher.group());
            sum += Integer.valueOf(matcher.group());
        }
        System.out.println("Сумма чисел " + sum);
    }
}
25. Дан рядок. Знайдіть найбільшу кількість пробілів в ньому, які йдуть підряд.
Відповідь:
import java.util.Scanner;

public class TStr25 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.nextLine());
        sb.append(".");
        int maxSize = 0;
        int count = 0;
        while (sb.length() > 0) {
            if (sb.charAt(0) !=32) {
                sb.deleteCharAt(0);
                if (count > maxSize) {
                    maxSize = count;
                    count = 0;
                }
            } else {
                count++;
                sb.deleteCharAt(0);
            }
        }
        System.out.println("Максимальна кількість пробілів ->" + maxSize);
    }
}


26. Дано два слова. Знайдіть тільки ті символи слів, які зустрічаються в обох словах лише один раз.
Відповідь:
import java.util.Arrays;
import java.util.Scanner;

public class TStr26 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("1 слово -> ");
        String s1 = deleteRepeat(in.next().trim());
        System.out.print("2 слово -> ");
        String s2 = deleteRepeat(in.next().trim());
        overlap(s1, s2);
    }

    private static void overlap(String s1, String s2) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < s1.length(); i++) {
            if (s2.indexOf(s1.charAt(i)) != -1) {
                sb.append(s1.charAt(i));
            }
        }
        if (sb.length() > 0) {
            System.out.println("Шукані символи: " + sb.toString());
        } else {
            System.out.println("Шукані символи відсутні");
        }
    }

    private static String deleteRepeat(String s) {
        char[] chars = s.toCharArray();
        Arrays.sort(chars);
        StringBuffer sb = new StringBuffer();
        int count = 1;
        for (int i = 1; i < chars.length; i++) {
            if (chars[i - 1] == chars[i]) {
                count++;
            } else {
                if (count == 1) {
                    sb.append(chars[i - 1]);
                }
                count = 1;
            }
        }
        if (count == 1) {
            sb.append(chars[chars.length - 1]);
        }
        return new String(sb);
    }
}


27. Дан масив рядків. Впорядкувати масив по довжині рядків.
Відповідь:
import java.util.Scanner;

public class TStr27 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        String[] s = in.nextLine().split(" ");
        String temp;
        for (int i = 0; i < s.length - 1; i++) {
            for (int j = i + 1; j < s.length; j++) {
                if (s[i].length() > s[j].length()) {
                    temp = s[i];
                    s[i] = s[j];
                    s[j] = temp;
                }
            }
        }
        for (int i = 0; i < s.length; i++) {
            System.out.println(s[i]);
        }
    }
}


28. Дан масив слів. Переставити слова за збільшенням цифр в слові.
Відповідь:
import java.util.Arrays;
import java.util.Scanner;

public class TStr28 implements Comparable {
    private String s;
    private int countNumber;

    // конструктор
    public TStr28(String s) {
        this.s = s;
        setCountNumber();
    }

    // рахуємо кількість цифр в слові
    private void setCountNumber() {
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) >= 48 && s.charAt(i) <= 57) {
                countNumber++;
            }
        }
    }

    // створюємо масив рядків з яких утворюємо масив потрібних об"єктів
    // сортуємо об"єкти та виводимо їх на екран
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        String[] s = in.nextLine().trim().split(" ");
        TStr28[] tStr28s = new TStr28[s.length];
        for (int i = 0; i < tStr28s.length; i++) {
            tStr28s[i] = new TStr28(s[i]);
        }
        Arrays.sort(tStr28s);
        for (int i = 0; i < tStr28s.length; i++) {
            System.out.println(tStr28s[i].s);
        }
    }

    // порівнюємо об"єкти за кількістю цифр в ньому
    @Override
    public int compareTo(TStr28 tStr) {
        if (countNumber > tStr.countNumber) {
            return 1;
        } else if (countNumber == tStr.countNumber) {
            return 0;
        } else {
            return -1;
        }
    }
}


29. Дан рядок. Замінити всі символи 'a' і 'b' на 'A' і 'B' відповідно.
Відповідь:
import java.util.Scanner;

public class TStr29 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.nextLine());
        for (int i = 0; i < sb.length(); i++) {
            if(sb.charAt(i)=='a'){
                sb.setCharAt(i,'A');
            }
            if(sb.charAt(i)=='b'){
                sb.setCharAt(i,'B');
            }
        }
        System.out.println(sb);
    }
}


30. Дан рядок. Сформувати новий рядок із символів, розташованих між першою і другою комами даного рядку.
Відповідь:
import java.util.Scanner;

public class TStr30 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.nextLine());
        if (sb.indexOf(",") >= 0) {
            sb.delete(0, sb.indexOf(",") + 1);
        } else {
            System.out.println("Не достатньо ком");
            System.exit(0);
        }
        if (sb.indexOf(",") >= 0) {
            sb.delete(sb.indexOf(","), sb.length());
            System.out.println("Шуканий підрядок: " + sb);
        } else {
            System.out.println("Не достатньо ком");
        }
    }
}



31. Дан рядок. Видаліть k-ий символ в рядку.
Відповідь:
import java.util.Scanner;

public class TStr31 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        StringBuffer sb = new StringBuffer(in.nextLine());
        System.out.print("Можна видалити символ від 1 до " + sb.length() + " ->");
        int number = in.nextInt();
        if (number <= sb.length() && number > 0) {
            sb.delete(number - 1, number);
            System.out.println("Новий рядок ->" + sb);
        } else {
            System.out.println("Символ під таким номером відсутній");
        }

    }
}

32. Дано два рядки. Визначте, чи міститься менший за довжиною рядок у більшому.
Відповідь:
import java.util.Scanner;

public class TStr32 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок 1 ->");
        StringBuffer sb1 = new StringBuffer(in.nextLine());
        System.out.print("Рядок 2 ->");
        StringBuffer sb2 = new StringBuffer(in.nextLine());
        if (sb1.length() > sb2.length()) {
            if (sb1.indexOf(sb2.toString()) >= 0) {
                System.out.println("Є входження");
            } else {
                System.out.println("Входження відсутнє");
            }
        } else {
            if (sb2.indexOf(sb1.toString()) >= 0) {
                System.out.println("Є входження");
            } else {
                System.out.println("Входження відсутнє");
            }
        }
    }
}


33. Дано два рядки. Визначте, чи можна з деяких символів першого рядка скласти другий рядок.
Відповідь:
import java.util.Scanner;

public class TStr33 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Рядок 1->");
        StringBuffer sb1 = new StringBuffer(scanner.nextLine());
        System.out.print("Рядок 2->");
        StringBuffer sb2 = new StringBuffer(scanner.nextLine());
        if (sb1.length() < sb2.length()) {
            System.out.println("Не можна");
            System.exit(0);
        } else {
            char ch;
            int index;
            while (sb2.length() > 0) {
                ch = sb2.charAt(0);
                index = sb1.indexOf(String.valueOf(ch));
                if (index >= 0) {
                    sb1.deleteCharAt(index);
                    sb2.deleteCharAt(0);
                } else {
                    System.out.println("Не можна");
                    System.exit(0);
                }
            }
            System.out.println("Можна");
        }
    }
}
34. Видалити в рядку всі цифри.
Відповідь:
import java.util.Scanner;

public class TStr34 {
    public static void main(String[] args) {
        System.out.print("->");
        StringBuffer sb = new StringBuffer(new Scanner(System.in).nextLine());
        for (int i = 0; i < sb.length(); i++) {
            if (sb.charAt(i) >= 48 && sb.charAt(i) <= 59) {
                sb.deleteCharAt(i);
                i--;
            }
        }
        System.out.println(sb.toString());
    }
}
35. Видаліть в рядку всі символи "!".
Відповідь:
import java.util.Scanner;

public class TStr35 {
    public static void main(String[] args) {
        System.out.print("->");
        StringBuffer sb = new StringBuffer(new Scanner(System.in).nextLine());
        for (int i = 0; i < sb.length(); i++) {
            if (sb.charAt(i) =='!') {
                sb.deleteCharAt(i);
                i--;
            }
        }
        System.out.println(sb.toString());
    }
}
36. У рядку знайдіть всі серії підряд йдуть прогалин і замініть кожну на один пробіл.
Відповідь:
import java.util.Scanner;

public class TStr36 {
    public static void main(String[] args) {
        System.out.print("->");
        String temp = new Scanner(System.in).nextLine().trim();
        StringBuffer sb = new StringBuffer(temp);
        String s = "  ";
        int index;
        do {
            index = sb.indexOf(s);
            if (index >= 0) {
                sb.replace(index,index+2," ");
            }
        } while (index != -1);
        System.out.println(sb.toString());
    }
}
37. Дана рядок, що складається з слів, розділених пробілами. Визначте кількість слів у рядку.
Відповідь:
import java.util.Scanner;

public class TStr37 {
    public static void main(String[] args) {
        System.out.print("->");
        String temp = new Scanner(System.in).nextLine().trim();
        StringBuffer sb = new StringBuffer(temp);
        delSpaces(sb);
        String[] s = sb.toString().split(" ");
        if (s[0].equals("")  ) {
            System.out.println("Слова відсутні");
        } else {
            System.out.println("В рядку " + s.length + " слів");
        }
    }

    public static void delSpaces(StringBuffer sb) {
        String s = "  ";
        int index;
        do {
            index = sb.indexOf(s);
            if (index >= 0) {
                sb.replace(index, index + 2, " ");
            }
        } while (index != -1);
    }
}
38. У даному рядку вставити після кожного символу 'a' символ 'b'.
Відповідь:
import java.util.Scanner;

public class TStr38 {
    public static void main(String[] args) {
        System.out.print("s ->");
        StringBuffer s = new StringBuffer(new Scanner(System.in).nextLine());
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == 'a') {
                s.insert(i + 1, 'b');
            }
        }
        System.out.println(s.toString());
    }
}
39. Дано два рядки. Видалити в першому рядку перше входження другого рядка.
Відповідь:
import java.util.Scanner;

public class TStr39 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        StringBuffer s1;
        String s2;

        System.out.print("s1 ->");
        s1 = new StringBuffer(scanner.nextLine());
        System.out.print("s2 ->");
        s2 = scanner.nextLine();

        int index = s1.indexOf(s2);
        if (index >= 0) {
            s1.delete(index, index + s2.length());
        }
        System.out.println("new s1 ->" + s1.toString());
    }
}
40. Дан рядок. Визначте, чи є вшн дійсним числом.
Відповідь:
import java.util.Scanner;

public class TStr40 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("s ->");
        String s=scanner.next();
        try {
            Double d=Double.valueOf(s);
            System.out.println("Yes");
        }catch (Exception e){
            System.out.println("No");
        }
    }
}
41. Рядок складається з слів, розділених одним або декількома пропусками. Знайдіть слово максимальної довжини.
Відповідь:
import java.util.Scanner;

public class TStr41 {
    public static void main(String[] args) {
        System.out.print("->");
        String temp = new Scanner(System.in).nextLine().trim();
        StringBuffer sb = new StringBuffer(temp);
        delSpaces(sb);
        String[] s = sb.toString().split(" ");
        int max = maxLength(s);
        System.out.println("->" + s[max]);
    }

    private static int maxLength(String[] s) {
        int max = Integer.MIN_VALUE;
        int index = 0;
        for (int i = 0; i < s.length; i++) {
            if (s[i].length() > max) {
                max = s[i].length();
                index = i;
            }
        }
        return index;
    }

    public static void delSpaces(StringBuffer sb) {
        String s = "  ";
        int index;
        do {
            index = sb.indexOf(s);
            if (index >= 0) {
                sb.replace(index, index + 2, " ");
            }
        } while (index != -1);
    }
}


42. У рядку записано десяткове число. Запишіть дане число римськими цифрами.
Відповідь:
import java.util.Scanner;

public class TStr42 {
    public static void main(String[] args) {
        int[] mas1 = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
        String[] mas2 = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
        System.out.print("Число ->");
        int n = new Scanner(System.in).nextInt();
        int i = 0;
        String s = "";
        while (n > 0) {
            if (mas1[i] <= n) {
                n -= mas1[i];
                s += mas2[i];
            } else {
                i++;
            }
        }
        System.out.println(s);
    }
}
43. Дан email в рядку. Визначити, чи є він коректним (наявність символу @ і точки, наявність не менше двох символів після останньої точки і т.д.).
Відповідь:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TStr43 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Рядок ->");
        String s = in.nextLine();
        Pattern pattern = Pattern.compile("(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:" +
                "[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")" +
                "@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\" +
                "[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:" +
                "(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])");
        Matcher matcher = pattern.matcher(s);
        if (matcher.matches()) {
            System.out.println("Правильний");
        } else {
            System.out.println("Не правильний");
        }
    }
}
44. Написати функцію генерації email.
Відповідь:
import java.util.Random;

public class TStr44 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        Random random = new Random();
        initEmail(sb, random);
        System.out.println(sb.toString());
    }

    private static void initEmail(StringBuffer sb, Random random) {
        int nameSize = random.nextInt(7) + 4;
        int domenSize = random.nextInt(3) + 2;
        generate(sb, random, nameSize);
        sb.append('@');
        generate(sb, random, domenSize);
        sb.append('.');
        generate(sb, random, 2);
    }

    private static void generate(StringBuffer sb, Random random, int nameSize) {
        for (int i = 0; i < nameSize; i++) {
            sb.append((char) (random.nextInt(26) + 97));
        }
    }
}
45. Дано натуральне число. Отримати рядок, в якій трійки цифр цього числа розділені пробілом, починаючи з правого кінця. Наприклад, число 1234567 перетвориться в 1 234 567.
Відповідь:
import java.util.Random;

public class TStr45 {
    public static void main(String[] args) {
        Random random = new Random();
        int numb = random.nextInt(Integer.MAX_VALUE);
        System.out.println(numb);
        StringBuffer sb = new StringBuffer();
        int i = 1;
        while (numb != 0) {
            sb.append(numb % 10);
            if (i % 3 == 0) {
                sb.append(" ");
            }
            i++;
            numb /= 10;
        }

        System.out.println(sb.reverse().toString().trim());
    }
}
46. Вивести слова, в яких замінити кожну велику букву одноімену малу; видалити символами, які не є буквами або ціфрами.
Відповідь:
import java.util.ArrayList;
import java.util.Scanner;

public class TStr46 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        ArrayList strings = new ArrayList<>();
        initArraysString(scanner, strings);
        change(strings);
        String[] words = getStrings(strings);
        display(words);
    }

    //Ініціалізація масиву рядків
    private static void initArraysString(Scanner scanner, ArrayList strings) {
        do {
            strings.add(scanner.nextLine());
        } while (!strings.get(strings.size() - 1).equals(""));
    }

    //вівд результату на екран
    private static void display(String[] words) {
        for (String s : words) {
            System.out.println(s);
        }
    }

    //отримання масиву рядків та зміна регістру
    private static String[] getStrings(ArrayList strings) {
        String[] words = strings.toArray(new String[strings.size()]);
        for (int i = 0; i < words.length; i++) {
            words[i] = words[i].toLowerCase();
        }
        return words;
    }

    //зміна символів
    private static void change(ArrayList strings) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < strings.size(); i++) {
            sb.append(strings.get(i));
            delOther(sb);
            strings.set(i, sb.toString());
            sb.delete(0, sb.length());
        }
    }

    //відалення зайвих символів
    private static void delOther(StringBuffer sb) {
        char ch;
        for (int i = 0; i < sb.length(); i++) {
            ch = sb.charAt(i);
            if ((ch < 'A' || ch > 'Z') && (ch < 'a' || ch > 'z') && (ch < '0' || ch > '9')) {
                sb.delete(i, i + 1);
                i--;
            }
        }
    }
}
47. Вивести текст, складений з перших букв усіх слів; всі слова, що містять більше однієї літери «о»
Відповідь:
import java.util.Scanner;

public class TStr47 {
    public static void main(String[] args) {
        System.out.print("Рядок ->");
        String[] strings = new Scanner(System.in).nextLine().trim().split(" ");
        StringBuffer sb = getStringBuffer(strings);
        find(strings);
        System.out.println(sb.toString());
    }

    private static void find(String[] strings) {
        for (int i = 0; i < strings.length; i++) {
            if (countLetet(strings[i]) > 1) {
                System.out.println(strings[i]);
            }
        }
    }

    private static int countLetet(String string) {
        int count = 0;
        for (int i = 0; i < string.length(); i++) {
            if (string.charAt(i) == 'о' || string.charAt(i) == 'О') {
                count++;
            }
        }
        return count;
    }

    private static StringBuffer getStringBuffer(String[] strings) {
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < strings.length; i++) {
            sb.append(strings[i].charAt(0));
        }
        return sb;
    }
}
48. Вивести в алфавітному порядку всі слова, що містять найбільшу кількість голосних букв.
Відповідь:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class TStr48 {
    public static void main(String[] args) {
        System.out.print("Рядок: ");
        String[] strings = new Scanner(System.in).nextLine().trim().split(" ");
        ArrayList words = new ArrayList<>();
        setWords(strings, words);
        strings = words.toArray(new String[words.size()]);
        Arrays.sort(strings);
        display(strings);
    }

    private static void display(String[] strings) {
        for (String s : strings
                ) {
            System.out.println(s);
        }
    }

    private static void setWords(String[] strings, ArrayList words) {
        int max = Integer.MIN_VALUE;
        int temp;
        for (int i = 0; i < strings.length; i++) {
            temp = countVowel(strings[i]);
            if (temp >= max) {
                if (temp > max) {

                    words.clear();
                    words.add(strings[i]);
                    max = temp;
                } else {
                    words.add(strings[i]);
                }
            }
        }
    }


    private static int countVowel(String string) {
        int count = 0;
        char ch;
        for (int i = 0; i < string.length(); i++) {
            ch = string.charAt(i);
            if (chIsVowel(ch)) {
                count++;
            }
        }
        return count;
    }

    private static boolean chIsVowel(char ch) {

        switch (ch) {
            case ('А'): return true;
            case ('а'): return true;
            case ('Е'): return true;
            case ('е'): return true;
            case ('Є'): return true;
            case ('є'): return true;
            case ('И'): return true;
            case ('и'): return true;
            case ('І'): return true;
            case ('і'): return true;
            case ('Ї'): return true;
            case ('ї'): return true;
            case ('О'): return true;
            case ('о'): return true;
            case ('У'): return true;
            case ('у'): return true;
            case ('Ю'): return true;
            case ('ю'): return true;
            case ('Я'): return true;
            case ('я'): return true;
            case ('Ы'): return true;
            case ('ы'): return true;
            case ('Э'): return true;
            case ('э'): return true;
            case ('Ё'): return true;
            case ('ё'): return true;
        }
        return false;
    }
}

49. Дана рядок. Вставити після кожного символу пробіл.
Відповідь:
import java.util.Scanner;

public class TStr49 {
    public static void main(String[] args) {
        System.out.print("->");
        String s = new Scanner(System.in).nextLine();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < s.length(); i++) {
            sb.append(s.charAt(i));
            sb.append(" ");
        }
        System.out.println(sb.toString());
    }
}
50. Дана рядок. Вставити після кожного символу два випадкових символи.
Відповідь:
import java.util.Random;
import java.util.Scanner;

public class TStr50 {
    public static void main(String[] args) {
        System.out.print("->");
        String s = new Scanner(System.in).nextLine();
        StringBuffer sb = new StringBuffer();
        Random random = new Random();
        for (int i = 0; i < s.length(); i++) {
            sb.append(s.charAt(i));
            inserRandom(sb, random);
        }
        System.out.println(sb.toString());
    }

    private static void inserRandom(StringBuffer sb, Random random) {
        sb.append((char)(random.nextInt(224)+32));
        sb.append((char)(random.nextInt(256)+32));
    }
}
51. Дан рядок. Якщо в рядку більше трьох різних символів, то видалити в рядку три будь-які різні символи, інакше додати до рядку в будь-яких місцях нові символи так, щоб кількість різних символів складала більше трьох.
Відповідь:
import java.util.Random;
import java.util.Scanner;

public class TStr51 {
    public static void main(String[] args) {
        System.out.print("Рядок ->");
        Scanner scanner = new Scanner(System.in);
        StringBuffer s = new StringBuffer(scanner.nextLine());
        StringBuffer temp = new StringBuffer();
        temp.append(s.charAt(0));
        for (int i = 1; i < s.length(); i++) {
            if (temp.indexOf(String.valueOf(s.charAt(i))) < 0) {
                temp.append(s.charAt(i));
            }
            if (temp.length() > 3) {
                delChars(s);
                System.out.println(s.toString());
                System.exit(0);
            }
        }
        addChars(s, temp);
        System.out.println(s.toString());
    }

    private static void addChars(StringBuffer s, StringBuffer temp) {
        Random random = new Random();
        int start;
        char ch;
        for (int i = 0; i < 3; i++) {
            do {
                ch = (char) (random.nextInt(26) + 'a');
            } while (temp.indexOf(String.valueOf(ch)) >= 0);
            s.insert(random.nextInt(s.length()), ch);
        }

    }

    private static void delChars(StringBuffer s) {
        Random random = new Random();
        for (int i = 0; i < 3; i++) {
            s.deleteCharAt(random.nextInt(s.length()));
        }
    }
}


52. Написати програму генерації паролів.
Відповідь:
import java.util.Random;
import java.util.Scanner;

public class TStr52 {
    public static void main(String[] args) {
        System.out.print("Довжина паролю ->");
        int n = new Scanner(System.in).nextInt();
        StringBuffer values = new StringBuffer("0123456789qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM");
        StringBuffer pas = new StringBuffer();
        Random random = new Random();
        for (int i = 0; i < n; i++) {
            swap(values, n, random);
            pas.append(values.charAt(random.nextInt(values.length())));
        }

        System.out.println(pas.toString());
    }

    private static void swap(StringBuffer values, int n, Random random) {
        char ch;
        int pos;
        for (int i = 0; i < n; i++) {
            pos = random.nextInt(values.length());
            ch = values.charAt(pos);
            values.deleteCharAt(pos);
            values.insert(random.nextInt(values.length()), ch);
        }
    }
}
53. Напишіть програму генерації рядків довжини 10, причому перші 4 символи - цифри, наступні два символи - різні букви, наступні 4 символи - нулі або одиниці, причому одна одиниця обов'язково присутня.
Відповідь:
import java.util.Random;

public class TStr53 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        Random random = new Random();
        initFirst(sb, random);
        initSecond(sb, random);
        initThree(sb, random);
        System.out.println(sb.toString());
    }

    private static void initFirst(StringBuffer sb, Random random) {
        for (int i = 0; i < 4; i++) {
            sb.append(random.nextInt(10));
        }
    }

    private static void initSecond(StringBuffer sb, Random random) {
        String s = "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM";
        sb.append(String.valueOf(s.charAt(random.nextInt(s.length()))));
        sb.append(String.valueOf(s.charAt(random.nextInt(s.length()))));
    }

    private static void initThree(StringBuffer sb, Random random) {
        int sum = 0;
        int numb;
        for (int i = 0; i < 4; i++) {
            numb = random.nextInt(2);
            sum += numb;
            sb.append(numb);
        }
        if (sum == 0) {
            sb.setCharAt(8 + random.nextInt(5), '1');
        }
    }
}

54. Написати генерацію рядків довжини 12, перші 5 символів якої - парні цифри, наступні 5 символів - букви 'a' - 'z', наступні 2 символу - "AB", якщо серед перших п'яти символів рядка є цифра 8, "XY" - якщо немає.
Відповідь:
import java.util.Random;

public class TStr54 {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer();
        Random random = new Random();
        initSb(sb, random);
        System.out.println(sb.toString());
    }

    private static void initSb(StringBuffer sb, Random random) {

        init1(sb, random);
        init2(sb, random);

    }

    private static void init1(StringBuffer sb, Random random) {
        int numb;
        for (int i = 0; i < 5; i++) {
            do {
                numb = random.nextInt(9);
            } while (numb % 2 == 1);
            sb.append(numb);
        }
    }

    private static void init2(StringBuffer sb, Random random) {
        String s = "qwertyuiopasdfghjklzxcvbnm";
        boolean flag = false;
        for (int i = 0; i < 5; i++) {
            sb.append(s.charAt(random.nextInt(s.length())));
            if (sb.charAt(i) == '8') {
                flag = true;
            }
        }
        if (flag) {
            sb.append("AB");
        } else {
            sb.append("XY");
        }
    }
}
55. Рядок складається з слів, розділених одним або декількома пробілами. Поміняйте місцями найбільше по довжині слово і найменше.
Відповідь:
import java.util.Scanner;

public class TStr55 {
    public static void main(String[] args) {
        System.out.println("->");
        String s = new Scanner(System.in).nextLine().trim();
        String[] words = s.split(" +");
        changeStr(words);
        for (int i = 0; i < words.length; i++) {
            System.out.print(words[i] + " ");
        }

    }

    private static void changeStr(String[] words) {
        int maxLength = Integer.MIN_VALUE;
        int minLength = Integer.MAX_VALUE;
        int indexMax = 0;
        int indexMin = 0;
        int length;
        for (int i = 0; i < words.length; i++) {
            length = words[i].length();
            if (length > maxLength) {
                maxLength = length;
                indexMax = i;
            }
            if (length < minLength) {
                minLength = length;
                indexMin = i;
            }
        }
        String temp = words[indexMax];
        words[indexMax] = words[indexMin];
        words[indexMin] = temp;
    }
}

56. Дано два речення. Для кожного слова першого речення визначте кількість його входжень у друге речення.
Відповідь:
import java.util.Scanner;

public class TStr56 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("1 ->");
        String[] s1 = scanner.nextLine().trim().split("[ ,.]+");
        System.out.print("2 ->");
        String[] s2 = scanner.nextLine().trim().split("[ ,.]");
        int[] counts = fill(s1, s2);
        display(s1, counts);
    }

    private static void display(String[] s1, int[] counts) {
        for (int i = 0; i < s1.length; i++) {
            System.out.println(s1[i] + " - " + counts[i]);
        }
    }

    private static int[] fill(String[] s1, String[] s2) {
        int[] counts = new int[s1.length];
        int col;
        for (int i = 0; i < s1.length; i++) {
            col = 0;
            for (int j = 0; j < s2.length; j++) {
                if (s1[i].compareToIgnoreCase(s2[j]) == 0) {
                    col++;
                }
            }
            counts[i] = col;
        }
        return counts;
    }
}


57. Рядок складається з слів, розділених одним або декількома пробілами. Переставте слова в алфавітному порядку.
Відповідь:
import java.util.Arrays;
import java.util.Scanner;

public class TStr57 {
    public static void main(String[] args) {
        System.out.print("->");
        String[] s = new Scanner(System.in).nextLine().trim().split(" +");
        Arrays.sort(s);
        for (String temp : s
                ) {
            System.out.println(temp);
        }
    }
}
58. Рядок складається з слів, розділених одним або декількома пробілами. Переставте слова за співпаданням їх довжин.
Відповідь:
import java.util.Scanner;

public class TStr58 {
    public static void main(String[] args) {
        System.out.print("->");
        String[] s = new Scanner(System.in).nextLine().trim().split(", |\\. |[ ,.]");
        sorted(s);
        for (String t : s
                ) {
            System.out.println(t);
        }
    }

    private static void sorted(String[] s) {
        String temp;
        for (int i = 0; i < s.length - 1; i++) {
            for (int j = i; j < s.length; j++) {
                if (s[i].length() > s[j].length()) {
                    temp = s[i];
                    s[i] = s[j];
                    s[j] = temp;
                }
            }
        }
    }
}

1 комментарий: