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

Объединить разделенный строки

14.02.2021, 20:35. Показов 2279. Ответов 9

Студворк — интернет-сервис помощи студентам
Я получаю данные в таком формате
Code
1
2
3
4
5
6
7
8
9
>DNA_CHAIN_ID_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG
>DNA_CHAIN_ID_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC
>DNA_CHAIN_ID_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC
TGGGAACCTGCGGGCAGTAGGTGGAAT
, где цепочка ДНК разъединена на 2 части, но в зависимости от ее длины, она может быть разделена и на больше частей.
Как возможно восстановить эту разделенную строку в одну, если, в том числе и ID, отделены друг от друга \r\n и просто использовать StringJoiner на \r\n не получится
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.02.2021, 20:35
Ответы с готовыми решениями:

Объединить две строки s1 и s2, причем из второй строки копировать не более n символов
strncat - сцепить две строки s1 и s2, причем из второй строки копировать не более n символов. Объявление: char...

Прочитать 3 строки, объединить 1 со 2, 2 с 3, 1 с 3. Вывести все три новые строки
Прочитать 3 строки, объединить 1 со 2, 2 с 3, 1 с 3. Вывести все три новые строки.

Прочитать 3 строки, объединить 1 со 2, 2 с 3, 1 с 3. Вывести все три новые строки
Прочитать 3 строки, объединить 1 со 2, 2 с 3, 1 с 3. Вывести все три новые строки.

9
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
14.02.2021, 21:46
633 50541, что конкретно нужно получить, например из этого куска?
0
0 / 0 / 0
Регистрация: 07.09.2019
Сообщений: 40
14.02.2021, 22:38  [ТС]
нужно получить 2 независимые строки.
Одна начинается со знака ">" и будет key в HashMap
Вторая строка из всего оставшегося до следующего знака ">" - value
Например:
Java
1
2
HashMap<String, String> data = new HashMap<>();
data.put(">DNA_CHAIN_ID_6404", "CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG")
Как видно обе строки до след. ">" склеены в одну

Добавлено через 4 минуты
Кое как у меня вышло с этим разобраться, но на выходе я получил ужасного франкенштейна
Буду рад, если поможете это привести к человеческому виду
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
 private HashMap<String, String> concatStrings(String filePath) throws IOException {
        ArrayList<String> keys = new ArrayList<>();
        ArrayList<String> concatenatedStrings = new ArrayList<>();
        HashMap<String, String> data = new HashMap<>();
 
        BufferedReader in = new BufferedReader(new FileReader(filePath));
 
        String line;
        String concatenatedString = "";
 
        while ((line = in.readLine()) != null) {
            while (!line.startsWith(">")) { //until a string doesn't start with the ">" sign it's a part of a DNA chain
                concatenatedString = concatenatedString + line.trim(); //save a piece
                line = in.readLine(); //retrieve a next piece of the DNA chain
                if (line == null) //if nothing to read further - break;
                    break;
            }
 
            if(line!=null) //if there is still something to read in file, conduct the following control
            if (line.startsWith(">")) //if a string starts with ">" it's an id from DB
                keys.add(line); //add to IDs
 
            if (!concatenatedString.startsWith(">") && !concatenatedString.equals("")) { //if a string is not empty and doesn't start with ">", then it's definitely a DNA chain
                concatenatedStrings.add(concatenatedString);//add to values
                concatenatedString = ""; //reset value
            }
        }
 
        for (int i = 0; i < keys.size(); i++)
            data.put(keys.get(i), concatenatedStrings.get(i)); //add everything to map
 
        return data;
    }
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
14.02.2021, 23:16
Лучший ответ Сообщение было отмечено 633 50541 как решение

Решение

633 50541, такой вот монстр

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
public static void main(String[] args) {
        String in = ">DNA_CHAIN_ID_6404\n" +
                "CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCC\n" +
                "TCCCACTAATAATTCTGAGG\n" +
                ">DNA_CHAIN_ID_5959\n" +
                "CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCT\n" +
                "ATATCCATTTGTCAGCAGACACGC\n" +
                ">DNA_CHAIN_ID_0808\n" +
                "CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGAC\n" +
                "TGGGAACCTGCGGGCAGTAGGTGGAAT";
        
        in = in.replaceAll("\\W", "");
        in = in.replaceAll("(DNA.+?\\d+?)(?:[A-Z])", " $1 ");
        Map<String, String> map = new HashMap<>();
 
        String[] items = in.trim().split(" ");
        for (int i = 0; i < items.length; i += 2) {
            map.put(items[i], items[i + 1]);
        }
        // ....
        for (Map.Entry<String, String> pair : map.entrySet()) {
            System.out.printf("Key: %s\nValue: %s\n", pair.getKey(), pair.getValue());
        }
    }
Bash
1
2
3
4
5
6
Key: DNA_CHAIN_ID_5959
Value: CATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCCAGGCGCTCCGCCGAAGGTCTATATCCATTTGTCAGCAGACACGC
Key: DNA_CHAIN_ID_6404
Value: CTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCTCTGAGGCTTCCGGCCTTCCCTCCCACTAATAATTCTGAGG
Key: DNA_CHAIN_ID_0808
Value: CACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAACGCTTCAGACCAGCCCGGACTGGGAACCTGCGGGCAGTAGGTGGAAT
1
0 / 0 / 0
Регистрация: 07.09.2019
Сообщений: 40
14.02.2021, 23:52  [ТС]
Супер. + Я подправил это под чтение из файла. Только одно "но" - первые буквы съедаются. Присмотритесь. DNA_CHAIN_ID_0808 начинается с СС, а в результате просто С
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
14.02.2021, 23:55
Ну регулярку чуть подправь
0
0 / 0 / 0
Регистрация: 07.09.2019
Сообщений: 40
14.02.2021, 23:56  [ТС]
Просто не въехал какую и как))))
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
14.02.2021, 23:56
Чето навроде (?=[A-Z])
1
0 / 0 / 0
Регистрация: 07.09.2019
Сообщений: 40
14.02.2021, 23:57  [ТС]
Да, сработало
0
 Аватар для Aviz__
2753 / 2060 / 509
Регистрация: 17.02.2014
Сообщений: 9,487
15.02.2021, 10:06
633 50541, думаю, ты был на верном пути
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void main(String[] args) {
        try (Scanner fileStrReader = new Scanner(new File("input.txt"))) {
            String lastIdDna = "";
            String curIdDna = "w";
            StringBuilder boxForVals = new StringBuilder();
            while (fileStrReader.hasNextLine()) {
                String curStr = fileStrReader.nextLine();
                if (curStr.startsWith(">DNA_CHAIN_ID")) {
                    curIdDna = curStr;
                    if (!curIdDna.equals(lastIdDna) && !lastIdDna.isEmpty()) {
                        System.out.printf("%s --> %s%n", lastIdDna, boxForVals.toString());
                        boxForVals.delete(0, boxForVals.toString().length() - 1);
                    }
                } else boxForVals.append(curStr);
                lastIdDna = curIdDna;
            }
            System.out.printf("%s --> %s%n", lastIdDna, boxForVals.toString());
        }catch (FileNotFoundException e) {e.printStackTrace();}
    }
файл содержит:
Кликните здесь для просмотра всего текста

>DNA_CHAIN_ID_6404
CCTGCGGAAGATCGGCACTAGAATAGCCAGAACCGTTTCT CTGAGGCTTCCGGCCTTCCC
TCCCACTAATAATTCTGAGG
>DNA_CHAIN_ID_5959
CCATCGGTAGCGCATCCTTAGTCCAATTAAGTCCCTATCC A
GGCGCTCCGCCGAAGGTCT
ATATCCATTTGTCAGCAGACACGC
>DNA_CHAIN_ID_0808
CCACCCTCGTGGTATGGCTAGGCATTCAGGAACCGGAGAA CGCTTCAGACCAGCCCGGAC
TGGGAACCTGCGGGCAGTAGGTGGAAT
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.02.2021, 10:06
Помогаю со студенческими работами здесь

Если строки одинаковы, объединить две строки, исключив из второй первые десять символов
Ввести строки. Сравнить первые десять символов двух строк. Если они одинаковы, объединить две строки, исключив из второй первые десять...

Объединить строки так, чтобы на нечётных местах шли буквы из первой строки, а на чётных - из второй
Даны две строки равной длины. Объединить их в одну строку и записать на место первой так, чтобы на нечётных местах шли буквы из первой...

Даны 2 строки символов: а) объединить строки в однутак,чтобы между ними был пробел; б)определить позицию пробела в объединенной строке; в)создать
Даны 2 строки символов: а) объединить строки в однутак,чтобы между ними был пробел; б)определить позицию пробела в объединенной...

Нарисовать круг разделённый радиусами
Помогите нарисовать круги с разными делениями на сектора. С возможностью различных вариантов, чтобы код не особо сложный был и не...

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru