Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1 / 1 / 0
Регистрация: 02.01.2016
Сообщений: 105
1

Большие и маленькие символы в массиве

08.05.2017, 00:03. Показов 2549. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Помогите пожалуйста решить задачку:
Дан массив символов, содержащий как большие, так и малые буквы. Нужно переписать массив так, чтобы большие и малые буквы чередовались. Если каких-то символов больше - то записать их в конец массива.
Нашел метод, который проверяет регистр Character.isLowerCase , а как реализовать не знаю.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2017, 00:03
Ответы с готовыми решениями:

Как преобразовать в строке все маленькие буквы в большие а большие в маленькие?
Дана строка .Преобразовать в ней все маленькие буквы в большие а большие в маленькие. Вот что я...

Как получить большие и маленькие символы
Всем привет, проблема заключаеться в следующем, вообщем делаю кейлоггер, так вот записываеться...

Нужно написать программу на C++ которая переводит большие символы в маленькие
:jokingly:Вообщем требуется написать программу на C++ которая переводит Большие английские буквы в...

Заменить символы в строке - все маленькие латинские буквы b на большие B
Помогите пожалуйста. Нужна программа которая заменяла бы в строке все маленькие латинские буквы b...

17
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
08.05.2017, 11:02 2
Очень круто, что нашел метод, но он тут ни при чем. Задание на работу с массивом символов. Тебе нужно из одного массива получить другой
0
51 / 51 / 23
Регистрация: 05.04.2010
Сообщений: 127
08.05.2017, 11:04 3
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
    static Queue<Character> lower = new ArrayDeque<>();
    static Queue<Character> upper = new ArrayDeque<>();
 
    public static void main(String[] args) {
 
        char[] arr = new char[]{'a', 'b', 'C', 'D', 'E', 'f', 'g'};
        fillLists(arr);
        char[] arr2 = fillArr(lower, upper);
        System.out.println(arr2);
 
    }
 
    private static char[] fillArr(Queue<Character> lower, Queue<Character> upper) {
 
        boolean lastLower = false;
        int len = lower.size() + upper.size();
        List<Character> arrList = new ArrayList<>();
 
        while (!lower.isEmpty() || !upper.isEmpty()) {
            if (!lower.isEmpty() && !upper.isEmpty()) {
                if (lastLower) {
                    arrList.add(upper.poll());
                    lastLower = false;
                } else {
                    arrList.add(lower.poll());
                    lastLower = true;
                }
            } else {
                if (lower.isEmpty()) {
                    arrList.addAll(upper);
                    upper.clear();
                } else {
                    arrList.addAll(lower);
                    lower.clear();
                }
            }
        }
        char[] arr = new char[arrList.size()];
        for (int i = 0; i < arrList.size(); i++) {
            arr[i] = arrList.get(i);
        }
        return arr;
    }
 
    private static void fillLists(char[] arr) {
        for (char c : arr) {
            if (Character.isLowerCase(c)) {
                lower.add(c);
            } else {
                upper.add(c);
            }
        }
    }
1
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
08.05.2017, 11:09 4
Хотя, я не прав, сорри не внимательно прочел условие)
0
1 / 1 / 0
Регистрация: 02.01.2016
Сообщений: 105
08.05.2017, 11:26  [ТС] 5
qualls, спасибо, но ArrayList я еще не проходил, может можно как-то без него обойтись?
0
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
08.05.2017, 12:20 6
Если только массивами - решал "в лоб". Тесты код проходит. Лови:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package com.we2seek.cyberforum.chararray;
 
import org.junit.Assert;
import org.junit.Test;
 
import java.util.Arrays;
 
public class App {
        private static final char[] source = "aBCcbAD".toCharArray();
 
    public static void main(String[] args) {
        System.out.println(source);
        System.out.println(alterCase(source));
    }
 
    public static final char[] alterCase(final char[] original) {
        // 1. Sort
        Arrays.sort(original);
 
        // 2. Find border between Upper and lowercase. The uppercase sequence comes first
        int lowerCaseStartsFrom = 0;
        while (lowerCaseStartsFrom++ < original.length && Character.isUpperCase(original[lowerCaseStartsFrom])) {
        }
 
        char[] upper = Arrays.copyOfRange(original, 0, lowerCaseStartsFrom);
        char[] lower = Arrays.copyOfRange(original, lowerCaseStartsFrom, original.length);
 
        // 3. Find common elements (same size)
        int maxCommon = upper.length > lower.length ? lower.length : upper.length;
 
        char[] result = new char[original.length];
        int i = 0;
        while (i <= maxCommon - 1) {
            result[i * 2] = upper[i];
            result[i * 2 + 1] = lower[i];
            i++;
        }
 
        // 4. Copy rest to the end
        if (upper.length > lower.length) {
            System.arraycopy(upper, maxCommon, result, maxCommon * 2, upper.length - maxCommon);
        } else if (lower.length > upper.length) {
            System.arraycopy(lower, maxCommon, result, maxCommon * 2, lower.length - maxCommon);
        }
 
        return result;
    }
 
    @Test
    public void testAlterCase1() {
        char[] src = {'d', 'f', 'g', 'F', 'D', 'G'};
        char[] alteredChars = alterCase(src);
        Assert.assertNotNull(alteredChars);
        Assert.assertEquals(src.length, alteredChars.length);
 
        Assert.assertArrayEquals("DdFfGg".toCharArray(), alteredChars);
    }
 
    @Test
    public void testAlterCase2() {
        char[] src = {'d', 'f', 'F', 'D', 'G'};
        char[] alteredChars = alterCase(src);
        Assert.assertNotNull(alteredChars);
        Assert.assertEquals(src.length, alteredChars.length);
 
        Assert.assertArrayEquals("DdFfG".toCharArray(), alteredChars);
    }
 
    @Test
    public void testAlterCase3() {
        char[] src = {'d', 'f', 'g', 'F', 'D'};
        char[] alteredChars = alterCase(src);
        Assert.assertNotNull(alteredChars);
        Assert.assertEquals(src.length, alteredChars.length);
 
        Assert.assertArrayEquals("DdFfg".toCharArray(), alteredChars);
    }
}
1
1 / 1 / 0
Регистрация: 02.01.2016
Сообщений: 105
08.05.2017, 12:30  [ТС] 7
we2seek, большое спасибо, но для меня Ваше решение еще сложно понять, так как я прошел только основные конструкции java и все задачки решал только в основном методе main().
0
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
08.05.2017, 12:33 8
The Vines, Во-первых, спасибо здесь не так говорят Во-вторых, не вопрос, я могу все запихнуть в main, но блин, тебе самому не будет обидно, если тебе все готовое не просто разжевали и положили в рот, а еще и съели за тебя? Может сам немного подумаешь?
0
1 / 1 / 0
Регистрация: 02.01.2016
Сообщений: 105
08.05.2017, 12:54  [ТС] 9
we2seek,Во-первых, я собирался поставить Вам спасибо как здесь принято, хотя считаю, что и в тексте увидеть благодарность тоже приятно! Во-вторых - я всего лишь сказал, что для меня Ваше решение сложновато пока. И в-третьих, если Вам так сложно это далось могли просто пройти мимо.
0
2883 / 2295 / 769
Регистрация: 12.05.2014
Сообщений: 7,978
08.05.2017, 14:01 10
Лучший ответ Сообщение было отмечено The Vines как решение

Решение

что бы не палить контору, не использовались всякие утилитарные методы для печати массивов и т.д.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class LettersArray {
 
    public static void main(String[] args) {
 
        char[] arr = new char[]{'a', 'b', 'C', 'D', 'E', 'f', 'g', 'z', 'x'};
        printArray(arr);
        //
        int lp = 0; // позиция в массиве строчных букв
        int up = 0; // тоже, но для заглавных
        int capQty = getCapitalLettersQty(arr);
        char[] lArr = new char[arr.length - capQty];
        char[] uArr = new char[capQty];
        // раскидываем заглавные и строчные в разные массивы
        for (char c : arr) {
            if (Character.isUpperCase(c)) uArr[up++] = c;
            else lArr[lp++] = c;
        }
        // берем из массивов по одной букве и пишем в исходный массив
        lp = 0;
        up = 0;
        for (int i = 0; i < arr.length - 1; i += 2) {
            if (lp < lArr.length) arr[i] = lArr[lp++];
            if (up < uArr.length) arr[i + 1] = uArr[up++];
        }
        printArray(arr);
    }
 
    private static int getCapitalLettersQty(char[] arr) {
        int q = 0;
        for (char c : arr) {
            if (Character.isUpperCase(c)) q++;
        }
        return q;
    }
 
    private static void printArray(char[] arr) {
        for (char c : arr) {
            System.out.print(c);
        }
        System.out.println();
    }
}
1
84 / 84 / 42
Регистрация: 25.01.2010
Сообщений: 386
08.05.2017, 14:07 11
The Vines, господи, прям big deal ваша благодарность. В очередной раз понял что зря трачу свое время для таких невеж. Больше не буду, чес слово)
0
1 / 1 / 0
Регистрация: 02.01.2016
Сообщений: 105
08.05.2017, 14:16  [ТС] 12
Паблито, Спасибо, Ваше решение наиболее понятно для меня!)

Добавлено через 4 минуты
we2seek, И это я невежа??
0
494 / 340 / 134
Регистрация: 14.06.2016
Сообщений: 658
08.05.2017, 16:51 13
Java
1
2
3
4
5
6
7
        char[] arr = new char[]{'a', 'b', 'C', 'D', 'E', 'f', 'g', 'z', 'x'};
        int[] place = {0, -1};
        int[][] a = new int[arr.length][];
        Arrays.setAll(a, i -> new int[]{arr[i], Character.isLowerCase(arr[i]) ? (place[1] += 2) : (place[0] += 2)});
        Arrays.sort(a, (i, j) -> i[1] - j[1]);
        for (int i = 0; i < arr.length; i++) arr[i] = (char) a[i][0];
        System.out.println(Arrays.toString(arr));
Bash
1
[a, C, b, D, f, E, g, z, x]
1
1 / 1 / 0
Регистрация: 02.01.2016
Сообщений: 105
08.05.2017, 17:01  [ТС] 14
vcrop, Очень интересно и коротко, спасибо. Было бы подходящим решением, но задачка с темы по одномерным массивам)
0
494 / 340 / 134
Регистрация: 14.06.2016
Сообщений: 658
08.05.2017, 17:01 15
Пусть висит )
0
1 / 1 / 0
Регистрация: 02.01.2016
Сообщений: 105
08.05.2017, 19:34  [ТС] 16
vcrop, Конечно, мне как новичку в java очень полезно рассмотреть различные варианты решений!)

Добавлено через 2 часа 22 минуты
vcrop, Если Вас не затруднит, можете еще без лямбды код написать?
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
08.05.2017, 23:44 17
тоже поупражняюсь
Java
1
2
3
4
5
6
7
8
9
        String s = "cbaCBA";
        Map<Boolean, List<Character>> partitioned = s.chars().mapToObj(c -> (char) c).collect(partitioningBy(Character::isUpperCase));
        List<Character> lows = partitioned.get(false);
        List<Character> caps = partitioned.get(true);
        int minSize = Math.min(lows.size(), caps.size());
        List<Character> head = IntStream.range(0, minSize).boxed().flatMap(i -> Stream.of(lows.get(i), caps.get(i))).collect(toList());
        List<Character> tail = (minSize == lows.size() ? caps : lows).stream().skip(minSize).collect(toList());
        head.addAll(tail);
        System.out.println(head);
1
1 / 1 / 0
Регистрация: 02.01.2016
Сообщений: 105
09.05.2017, 00:41  [ТС] 18
xoraxax, И Вам спасибо. Решений на любой вкус)
0
09.05.2017, 00:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.05.2017, 00:41
Помогаю со студенческими работами здесь

Во введённом с клавиатуры слове заменить, начиная с 4-го символа, все маленькие символы на большие и наоборот
Необходимо в введённом с клавиатуры слове заменить начиная с 4-го символа все маленькие символы на...

Заменить в тексте все большие латинские буквы на маленькие, не изменяя все остальные символы
Цель работы: Сформировать понятие величин строкового типа. Научиться составлять алгоритмы обработки...

В массиве A[1..14] выкинуть самые большие и самые маленькие элементы и заменить их средним арифметическим элементов, которые остались.
В массиве A выкинуть самые большие и самые маленькие элементы и заменить их средним арифметическим...

Большие-маленькие
На входе строка содержащая большие и маленькие буквы, необходимо большие сделать маленькими, а...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru