Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/18: Рейтинг темы: голосов - 18, средняя оценка - 4.89
1 / 1 / 0
Регистрация: 16.04.2015
Сообщений: 26

Сравнение 2-х строк, с разбивкой по символам

30.05.2019, 08:35. Показов 3873. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую всех!
Необходима подсказка как реализовать задумку
Есть 2 строки состоящие строго из цифр (строки могут быть ):
22325235
35232

Необходимо посимвольно сравнить короткую с длинной или длинную с короткой (не существенно), найти одинаковые символы, и при нахождении как-либо выделять оба символа в строке (также исключаем из последующего поиска оба символа), потом переходить к след символу и так до конца строки.
Голову ломаю, но пока ничего светлого не приходит.
Буду очень благодарен если подскажете.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.05.2019, 08:35
Ответы с готовыми решениями:

Сравнение строк по их начальным символам
У нас есть файл с содержанием: 123|456 456|789 qwe|rty. В программу поступают данные qwe она должна вывести rty. Сравнивать...

Сравнение по символам строки
Суть такова Только символьно и один массив надо сравнить те строки где 20 символ равен "K"(грубо говоря) те которые...

Сравнение значений ячеек по первым символам
Добрый день, форумчане! Повторно обращаюсь за помощью, очень надо. Задача: в столбце "А" значения, состоящие из шести цифр...

11
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
30.05.2019, 09:02
Цитата Сообщение от badmaster Посмотреть сообщение
если подскажете
Подскажем. Ты только сначала по-человечески проблему сформулируй. Не как надо сделать, а что надо сделать.
Нужно найти символы, которые встречаются в обеих строках? Или встречаются в обеих строках только один раз? Или что?
Пример входных и выходных данных тоже не помешает.
0
1 / 1 / 0
Регистрация: 16.04.2015
Сообщений: 26
30.05.2019, 09:29  [ТС]
Пример входных данных:
1 строка = 253
2 строка = 552323

Нужно сравнить 2 стоки, состоящие из цифр, на предмет совпадения чисел. После совпадения чисел, необходимо оба числа как-то выделить в строке и убрать из дальнейшего использования при поиске.
Вывод: обе строки выводятся в такой же последовательности, но с указанием какие пары найдены и эти пары как-либо визуально видно
Пример выходных данных:
1 строка = 253
2 строка = 552323
0
528 / 263 / 70
Регистрация: 11.12.2016
Сообщений: 1,223
30.05.2019, 16:34
badmaster, Вы сами себе противоречите. Любому из символов строки "253" можно сопоставить символ строки "552323", так как они все там присутствуют.
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
30.05.2019, 18:10
ViktorFX, та не, как я понял, каждый символ меньшей строки может иметь только одну пару в большей, т.е. выделяется первая найденная пара

Добавлено через 41 минуту
Ну, я решил с помощью цветов выделять, но количество цветов ограничено, поэтому их может не хватить. В таком случае, программа просто перестанет что-либо менять. Так же я не запаривался с подбором цветов, поэтому в начале идут тёмные, но если надо - поменяете порядок

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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.Scanner;
import java.util.stream.Collectors;
 
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
 
public class FindPair {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.print("Enter first number: ");
        int first = in.nextInt();
        System.out.print("Enter second number: ");
        int second = in.nextInt();
        in.close();
        
        String s1 = String.valueOf(first);
        String s2 = String.valueOf(second);
        
        String temp_s1 = Arrays.stream(s1.split("")).distinct().collect(Collectors.joining());
        
        if (s1.length() > s2.length()) {
            String temp = s1;
            s2 = s1;
            s2 = temp;
        }
        
        ArrayList<String> colors = new ArrayList<>() {
            private static final long serialVersionUID = 1L;
        {
            add("purple");
            add("fuchsia");
            add("navy");
            add("blue");
            add("teal");
            add("aqua");
            add("green");
            add("lime");
            add("olive");
            add("yellow");
            add("maroon");
            add("red");
            add("gray");
            add("silver");
        }};
        
        StringBuilder sb = new StringBuilder();
        String out1 = "<html>" + s1 + "</html>";
        String out2 = "<html>" + s2 + "</html>";
        boolean flag;
        Iterator<String> iter = colors.iterator();
        for (char c : temp_s1.toCharArray()) {
            flag = false;
            for (char k : s2.toCharArray()) {
                if (c == k)
                    flag = true;
            }
            if (flag) {
                if (iter.hasNext()) {
                    sb.append("<font color=\"").append(iter.next()).append("\">").append(c).append("</font>");
                    String temp = sb.toString();
                    out1 = out1.replaceFirst(String.valueOf(c), temp);
                    out2 = out2.replaceFirst(String.valueOf(c), temp);
                    sb.delete(0, sb.length());
                }
            }
        }
        
        final String fout1 = out1;
        final String fout2 = out2;
        EventQueue.invokeLater(() -> {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
            
            JPanel northPanel = new JPanel();
            JLabel label_1 = new JLabel(fout1);
            northPanel.add(label_1);
            
            JPanel southPanel = new JPanel();
            JLabel label_2 = new JLabel(fout2);
            southPanel.add(label_2);
            
            frame.add(northPanel, BorderLayout.NORTH);
            frame.add(southPanel, BorderLayout.SOUTH);
            
            frame.pack();
            frame.setVisible(true);
        });
    }
}
Добавлено через 1 минуту
И прошу, не докапывайтесь до названий. Согласен, плохие, но ничего лучшего в голову не пришло в момент написания
1
1 / 1 / 0
Регистрация: 16.04.2015
Сообщений: 26
31.05.2019, 11:09  [ТС]
Gungala, всё верно, задумка именно такая.
Огромное спасибо за ваше время и код!
После проверки отпишусь
0
31.05.2019, 11:33

Не по теме:

Цитата Сообщение от Gungala Посмотреть сообщение
не докапывайтесь до названий
да Бог с тобой, обычно мы уточняем для истины, а не для показать какой чел лох.

0
 Аватар для InvalidCode
295 / 470 / 86
Регистрация: 26.02.2018
Сообщений: 931
Записей в блоге: 2
31.05.2019, 11:51
Цитата Сообщение от Gungala Посмотреть сообщение
но количество цветов ограничено
Java
1
Color c = new Color(int red, int grean, int blue)
по диапазону 0- 255 в каждом цвете вам мало?
0
 Аватар для Aviz__
2741 / 2050 / 507
Регистрация: 17.02.2014
Сообщений: 9,470
31.05.2019, 11:55
Цитата Сообщение от InvalidCode Посмотреть сообщение
по диапазону 0- 255
приведи их имена, этих цветов))
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
31.05.2019, 12:01
есть много чего другого, кроме названий, например, тут должно быть Array.asList, а лучше нормальную генерацию цветов прикрутить
Цитата Сообщение от Gungala Посмотреть сообщение
ArrayList<String> colors = new ArrayList<>() {
* * * * * * private static final long serialVersionUID = 1L;
* * * * {
* * * * * * add("purple");
* * * * * * add("fuchsia");
* * * * * * add("navy");
* * * * * * add("blue");
* * * * * * add("teal");
* * * * * * add("aqua");
* * * * * * add("green");
* * * * * * add("lime");
* * * * * * add("olive");
* * * * * * add("yellow");
* * * * * * add("maroon");
* * * * * * add("red");
* * * * * * add("gray");
* * * * * * add("silver");
* * * * }};
Добавлено через 3 минуты
вот тоже интересное место
Цитата Сообщение от Gungala Посмотреть сообщение
if (s1.length() > s2.length()) {
* * * * * * String temp = s1;
* * * * * * s2 = s1;
* * * * * * s2 = temp;
* * * * }
0
 Аватар для Goongala
1022 / 562 / 185
Регистрация: 18.08.2013
Сообщений: 2,027
Записей в блоге: 2
31.05.2019, 13:14
Цитата Сообщение от xoraxax Посмотреть сообщение
генерацию цветов прикрутить
Я хотел, но это нельзя сделать конкретно в моём варианте программы, ибо придётся цифрами задавать цвет, а у меня в ходе программы совпадающие цифры заменяются на html код, т.е. цифры из обозначения RGB цвета может заменить на ещё один цвет и так без конца. Я осознал это только когда уже написал основную логику и мне было лень переписывать. Да и, если честно, я и не знаю как это можно реализовать. Если вы объясните, буду премного благодарен

Цитата Сообщение от xoraxax Посмотреть сообщение
вот тоже интересное место
Ну так, нужно же найти только по одной паре для каждой цифры. Очевидно, что в более короткой строке цифр будет поменьше. Конечно, если будут сравниваться два шестизначных числа с большим диапазоном, то эта операция лишается смысла, но по крайней мере в некоторых случаях это облегчает поиск

Добавлено через 2 минуты
А, чёрт, я понял. Ну, поспешил и не заметил, извиняюсь
Java
1
2
3
4
5
        if (s1.length() > s2.length()) {
            String temp = s1;
            s1 = s2;
            s2 = temp;
        }
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
31.05.2019, 14:05
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
public static void main(String[] args) {
        String s1 = JOptionPane.showInputDialog("Please input s1: ");
        String s2 = JOptionPane.showInputDialog("Please input s2: ");
 
        if (s1.length() > s2.length()) {
            String temp = s1;
            s1 = s2;
            s2 = temp;
        }
 
        int[] matches = getMatches(s1, s2);
        String[] colors = getColors(s1, matches);
 
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        for (int i = 0; i < s1.length(); i++) {
            char c = s1.charAt(i);
            if (matches[i] < 0) {
                sb1.append(c);
            } else {
                wrapFontColor(sb1, colors[i], c, i);
            }
        }
        for (int i = 0; i < s2.length(); i++) {
            int index = indexOf(matches, i);
            if (index < 0) {
                sb2.append(s2.charAt(i));
            } else {
                wrapFontColor(sb2, colors[index], s2.charAt(i), index);
            }
        }
        wrapHtml(sb1);
        wrapHtml(sb2);
        draw(sb1.toString(), sb2.toString());
    }
 
    private static void wrapFontColor(StringBuilder sb2, String color, char c, int mark) {
        sb2.append("<font color='").append(color).append("'>").append(c).append("</font><sub>").append(mark).append("</sub>");
    }
 
    private static void wrapHtml(StringBuilder sb1) {
        sb1.insert(0, "<html>");
        sb1.append("</html>");
    }
 
    private static String[] getColors(String s1, int[] matches) {
        long count = Arrays.stream(matches).filter(i -> i >= 0).count();
        String[] colors = new String[s1.length()];
        int j = 0;
        for (int i = 0; i < colors.length; i++) {
            if (matches[i] >= 0) {
                colors[i] = getColor(360 * j++ / count);
            }
        }
        return colors;
    }
 
    private static String getColor(float hue) {
        Color hsbColor = Color.getHSBColor(hue / 360, 1f, 0.5f);
        String rgb = String.format("#%02x%02x%02x", hsbColor.getRed(), hsbColor.getGreen(), hsbColor.getBlue());
        System.out.println(rgb);
        return rgb;
    }
 
    private static void draw(String fout1, String fout2) {
        EventQueue.invokeLater(() -> {
            JFrame frame = new JFrame();
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setLocationRelativeTo(null);
 
            JPanel northPanel = new JPanel();
            JLabel label_1 = new JLabel(fout1);
            northPanel.add(label_1);
 
            JPanel southPanel = new JPanel();
            JLabel label_2 = new JLabel(fout2);
            southPanel.add(label_2);
 
            frame.add(northPanel, BorderLayout.NORTH);
            frame.add(southPanel, BorderLayout.SOUTH);
 
            frame.pack();
            frame.setVisible(true);
        });
    }
 
    private static int[] getMatches(String s1, String s2) {
        List<Integer> used = new ArrayList<>(s2.length());
        int[] matches = new int[s1.length()];
        Arrays.fill(matches, -1);
        for (int i = 0; i < s1.length(); i++) {
            for (int j = 0; j < s2.length(); j++) {
                if (s1.charAt(i) == s2.charAt(j) && !used.contains(j)) {
                    used.add(j);
                    matches[i] = j;
                    break;
                }
            }
        }
        return matches;
    }
 
    private static int indexOf(int[] arr, int value) {
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == value) {
                return i;
            }
        }
        return -1;
    }
Зарефакторить надо, а так вроде работает
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
31.05.2019, 14:05
Помогаю со студенческими работами здесь

Сравнение данных полей по нескольким символам - как?
нужно сравнить данные двух таблиц, причем в одной все достаточно формально и неизменно, а во второй могут встречаться вольности, поэтому...

Поиск строк в таблице по символам
Сделал страницу с таблицей, и в этой таблице хочу сделать поиск по строкам. И каждая строка с вхождением в ячейке должна перемещаться и...

Конкатенация двух строк к символам
Чтоб алфавит получал например а б выводил ааб аbб ... аzб class Alphabets { public static void main(String args)

Поиск строк по символам в Memo
Доброго времени суток. Задача заключаеться в том чтобы найти строки в memo по символам введеным в edit-е, т.е. в memo хряниться много строк...

Сортировка строк по трем символам
Доброго времени суток! Нужна помощь в сортировке строк. Дана структура, необходимо отсортировать телефонные номера по трем первым числам ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru