Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
umbrto
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 71
#1

Разбиение строки - Программирование Android

12.12.2015, 16:54. Просмотров 834. Ответов 40
Метки нет (Все метки)

И снова здравствуйте, форумчане.
Делал одно приложение и возникла загвоздка. Приложение принимает строку и разделяет ее на строки вида:[x/y] - z,
где х - номер строки, у - макс кол-во символов в строке, z - часть исходного текста.
Идея такая, что пользователь вводит строку, задает макс кол-во символов и нажимает на кнопку, которая это конвертирует.
Так вот проблема в том, что я не понимаю как осуществить разделение строки на несколько строк. Пробовал методом split(String regex), но он разделяет только по определенным значениям, а мне надо что бы разделяло по кол-во символов в строке.
Ну вот пример:
Кликните здесь для просмотра всего текста
текст: “Шла Саша по шоссе и сосала сушку.”,
максимальное количество символов в строке: 20

Результат выполнения
[1/20] - Шла Саша по
[2/20] - шоссе и со
[3/20] - сала сушку.

Чуть не забыл код:
Кликните здесь для просмотра всего текста
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
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
 
public class MainActivity extends Activity implements OnClickListener {
    Button btnWrite, btnRead;
    EditText edit1, edit2;
    String filePath, Note;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btnWrite = (Button)findViewById(R.id.btnWrite);
        btnRead = (Button)findViewById(R.id.btnRead);
        edit1 = (EditText)findViewById(R.id.edit1);
        edit2 = (EditText)findViewById(R.id.edit2);
        btnRead.setOnClickListener(this); 
        btnWrite.setOnClickListener(this);}
    @Override
    public void onClick(View v) {
        switch(v.getId())
        {
        case R.id.btnWrite:
            try {   
                Note = edit1.getText().toString();
                String s1 = edit2.getText().toString(); 
                double res = Double.parseDouble(s1);
                
                
        } catch (IOException e) {               
            Toast.makeText(this, e.getMessage(),Toast.LENGTH_LONG).show(); 
            }break;
        case R.id.btnRead:
            Intent anIntent;
            anIntent = new Intent(this,Result.class);
            startActivity(anIntent);
            break;}
        
    }
    
    
 
}

Кнопка Write конвертирует, вторая переходит на другое активити с результатом.
То есть строка должна разбиться на строки, в которых кол-во символов меньше,чем введенное значение в поле edit2.
Буду рад любой помощи!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2015, 16:54     Разбиение строки
Посмотрите здесь:

String разбиение строки - Программирование Android
Добрый день! Есть строка: "\u0003Q\u0004 \u001ERd\u0002000000,U,P, ,1001,A77 ,1 , 2338, , 0, ,0, ...

Разбиение ListView - Программирование Android
Здравствуйте. Есть ListView с записями. Каждая запись имеет свою дату. Хочу разделить этот список по датам. Ну например блок записей...

Разбиение строки - Visual Basic
как разбить строку ("432,543,345") на части по запятым , и записать эти числа как переменные?

Разбиение строки - C#
Вообщем вот проект () что получилось сделать Задание таково: 5 строк текста перемещаются слева-направо и наоборот, при достижении ...

разбиение строки - PHP
Доброго времени суток. В бд в одном поле хранится к примеру три числа через ";" (10; 20; 30;). И есть три текстовых инпута. Как сделать...

Разбиение строки - Delphi
Есть строка типа 123123:6542364:2366565326:623632632:abcd и есть 5 editов на форме, как можно разить эту строку на 5 частей и поместить в...

Разбиение строки - C++
Доброго времени суток. Я новичок в кодинге. Передо мной такая задача: есть строка str с числами, разделенными через пробел. ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
12.12.2015, 18:26     Разбиение строки #2
Обратите внимание на метод substring. Вот он то вам и нужен.
umbrto
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 71
12.12.2015, 19:15  [ТС]     Разбиение строки #3
хорошо погуглю
спасибо!

Добавлено через 17 минут
хорошо, а как сделать так, что бы в каждой строке было одинаковое количество символов?
ну что бы те строки, которые получились в рез-те содержали одинаковое кол-во символов?
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
12.12.2015, 21:34     Разбиение строки #4
Цитата Сообщение от umbrto Посмотреть сообщение
хорошо, а как сделать так, что бы в каждой строке было одинаковое количество символов?
ну что бы те строки, которые получились в рез-те содержали одинаковое кол-во символов?
Допустим есть строка - "привет оля". Размер строки 10. Вам нужно определить по сколько символов будете разбивать. К примеру по 2, естественно желательно чтобы строка имела четное кол-во символов, в крайнем случае можете добавлять пробел в конец.
Ну и дробите ее.
0 -> 2
2 -> 4
4 -> 6
6 -> 8
8 -> 10
Вот у вас и получится 5 строк по два символа.
umbrto
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 71
12.12.2015, 23:24  [ТС]     Разбиение строки #5
это я понимаю, но пользователь введет строку и введет максимальное кол-во символов
так вот программа должна разбить эту строку на строки с одинаковыми количествами символов
программа изначально не знает по сколько символов будет в каждой строке
то есть допустим есть строка"лалала" и польщователь вводит макс кол-во символов 1
получаем:
Кликните здесь для просмотра всего текста
л
а
л
а
л
а

или вводит макс кол-во 2, то:
Кликните здесь для просмотра всего текста
ла
ла
ла

вот в чем вопрос как сделать так, что бы программа в независимости от макс кол-ва символов работала правильно!
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
13.12.2015, 09:44     Разбиение строки #6
правильно я понял Ваш вопрос, что проблема в последнем наборе?
добейте его пробелами. не?
vindigo
18 / 18 / 3
Регистрация: 15.05.2014
Сообщений: 78
13.12.2015, 10:37     Разбиение строки #7
Может так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
String s = "Вася и еще два Васи"; //строка
        intNumSymbol = 3; // символы в строке
        int intNumOfOutputStrings = s.length()/intNumSymbol; // кол-во строк
        if((s.length()%intNumSymbol) != 0) { // если нацело не делится,
            intNumOfOutputStrings++; // то добавляем дополнительно строку
        }
        
        for(int i = 0, beginIndex = 0, lastIndex = intNumSymbol; i < intNumOfOutputStrings; i++) {
            
            
            beginIndex += intNumSymbol; // смещаем на три вправо
            
            if(s.length()-lastIndex < intNumSymbol) {// чтобы lastIndex не стал
                lastIndex = s.length(); // больше длины строки проверим наверно так
            } else {
                lastIndex += intNumSymbol;
            }
            
            
        }
не самый изящный я думаю способ, но рабочий
вывод:
Вас
я и
ещ
е д
ва
Вас
и
umbrto
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 71
13.12.2015, 16:59  [ТС]     Разбиение строки #8
не только в последнем наборе
я написал вот такой код, он впрниципе работает правильно, но не выводит последнюю строку, из-за того чтоо индекс конца строки превышает ее(строки) размер
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Test {
 
    public static void main(String[] args) {
        String res ="Шла Саша по шоссе и сосала сушку.";
                int start=0, end=11;
                for(int i = 1; i<res.length(); i++){
                    String r1 = "[" + i + "/" + 20 + "]" + "=";
                    String r2 = res.substring(start, end);
                    start = end;
                    end+=end;
                    System.out.println(r1 + r2);
                    
                }
 
    
 
}}


Добавлено через 49 секунд
vindigo, спасибо за ответ
но кол-во символов в строке должно быть одинаковое
vindigo
18 / 18 / 3
Регистрация: 15.05.2014
Сообщений: 78
13.12.2015, 17:16     Разбиение строки #9
че-то не понял
Цитата Сообщение от umbrto Посмотреть сообщение
но кол-во символов в строке должно быть одинаковое
а если символов в исходной строке - 13, юзер выбирает деление по 3 символа, куда еще один денем?
Pablito
2420 / 1865 / 583
Регистрация: 12.05.2014
Сообщений: 6,604
Завершенные тесты: 1
13.12.2015, 17:19     Разбиение строки #10
Цитата Сообщение от umbrto Посмотреть сообщение
текст: “Шла Саша по шоссе и сосала сушку.”,
максимальное количество символов в строке: 20
Результат выполнения
[1/20] - Шла Саша по
тут 20 символов?
vindigo
18 / 18 / 3
Регистрация: 15.05.2014
Сообщений: 78
13.12.2015, 17:24     Разбиение строки #11
Паблито, это по ходу для примера
но все равно нужно либо добивать пробелами, как сказал bastrakov, либо проверять каждую итерацию чтоб за длину не вылететь
umbrto
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 71
14.12.2015, 01:31  [ТС]     Разбиение строки #12
Паблито, тут идет подсчет строки начиная со знака "[" и получается 20

Добавлено через 2 часа 14 минут
вот более менее разобрался что к чему
но остается все равно вопрос
у меня там, где должно меняться число [1\20], [2\20] и тд, остается одинаковым и равно 0
я понимаю из-за чего это(потому что я как бы и объявил 0 для этой переменной), но мне надо, что бы оно в цикле менялось
не знаю поняли ли вы о чем я, но вот код:
Кликните здесь для просмотра всего текста
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
public class Test {
 
    public static void main(String[] args) {
        
       
        String s1 = "Шла Саша по шоссе и сосала сушку."; //строка
        int i =0;
        int NumSymbol = 20; // символы в строке
        String r1 = "[" + i + "/" + NumSymbol + "]" + " " +"=" + " "; // строка начальная [1\20] = и тд
        int beginIndex = 0;
        int l1 = r1.length() + s1.length(); // общая длина строк для выяснения кол-ва субстрок
        int NewNumSymbol = NumSymbol - r1.length(); // перемення для lastIndex (то есть сколько именно символов в куске текста после [1\20] = )
        int lastIndex = NewNumSymbol;
        int intNumOfOutputStrings = l1/NumSymbol; // кол-во строк
        if((l1% NumSymbol) != 0) { 
            intNumOfOutputStrings++; 
           // System.out.println(intNumOfOutputStrings);
             }
        
        for( i = 0; i < intNumOfOutputStrings; i++) {
            
            String res = r1 + s1.substring(beginIndex, lastIndex); // разбиение строки
            
            System.out.println(res);
            
            beginIndex=lastIndex;
            lastIndex+=NewNumSymbol;
    
        }
        
    }}

и то, что получается:
Кликните здесь для просмотра всего текста
[0/20] = Шла Саша по
[0/20] = шоссе и со
[0/20] = сала сушку.

ехидны редактор почему то не прочитал второй пробел во второй строке(перед "шоссе" еще один пробел) и тогда получается,что в каждой строке одинаковое кол-во символов
но мне надо, что бы номер строки не был равен 0
у меня уже голова кипит и я не понимаю, что надо сделать, что бы номер строки обновлялся в цикле

Добавлено через 16 минут
ай блин я не учел, что строка может быть маленькая и допустим пользователь по 1 символу в строке хочет
тогда куча ошибок вылезет
вот блиииин
и что в таком случае делать?
vindigo
18 / 18 / 3
Регистрация: 15.05.2014
Сообщений: 78
14.12.2015, 01:37     Разбиение строки #13
Цитата Сообщение от umbrto Посмотреть сообщение
ай блин я не учел, что строка может быть маленькая и допустим пользователь по 1 символу в строке хочет
тогда куча ошибок вылезет
вот блиииин
и что в таком случае делать?
umbrto, а это я для кого писал?
Цитата Сообщение от vindigo Посмотреть сообщение
че-то не понял
Сообщение от umbrto
но кол-во символов в строке должно быть одинаковое
а если символов в исходной строке - 13, юзер выбирает деление по 3 символа, куда еще один денем?
umbrto
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 71
14.12.2015, 01:51  [ТС]     Разбиение строки #14
да я видел твое сообщение, но мне для начала надо было хотя бы пример реализовать)
а теперь вот когда столкнулся с такой проблемой вспомнил и про твое сообщение
vindigo
18 / 18 / 3
Регистрация: 15.05.2014
Сообщений: 78
14.12.2015, 02:03     Разбиение строки #15
ща погоди, допишу

Добавлено через 7 минут
ща погоди, допишу
по-моему будет понятней для пользователя, если реализовать кол-во "чистых" символов в строке, т.е только "Шла Саша по шоссе и сосала сушку." Без приставок всяких.
Если да то вот рабочий код:

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
public class Test {
 
    public static void main(String[] args) {
        
       
        String s = "Шла Саша по шоссе и сосала сушку."; //строка
        int intNumSymbol = 20; // символы в строке
        
        int intNumOfOutputStrings = s.length()/intNumSymbol; // кол-во строк
        if((s.length()%intNumSymbol) != 0) { // если нацело не делится,
            intNumOfOutputStrings++; // то добавляем дополнительно строку
        }
        
        for(int i = 0, beginIndex = 0, lastIndex = intNumSymbol, x = 1; i < intNumOfOutputStrings; i++) {
            
            System.out.println("[" + x + "/" + intNumSymbol + "]" + " " +"=" + " " + s.substring(beginIndex, lastIndex));
            x++;
            beginIndex += intNumSymbol; // смещаем на три вправо
            
            if(s.length()-lastIndex < intNumSymbol) {// чтобы lastIndex не стал
                lastIndex = s.length(); // больше длины строки проверим наверно так
            } else {
                lastIndex += intNumSymbol;
            }
            
            
        }
        
    }}
вывод по 20

[1/20] = Шла Саша по шоссе и
[2/20] = сосала сушку.

вывод по 5

[1/5] = Шла С
[2/5] = аша п
[3/5] = о шос
[4/5] = се и
[5/5] = сосал
[6/5] = а суш
[7/5] = ку.
umbrto
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 71
14.12.2015, 03:06  [ТС]     Разбиение строки #16
vindigo, понятней, может и понятней, но задание никто не отменял)
а по заданию подсчет строки с символа "["
так бы не было бы проблем)
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
14.12.2015, 08:01     Разбиение строки #17
Сообщение было отмечено автором темы, экспертом или модератором как ответ
задачка понравилась - прикольная. :-)
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
    private static int subStrLength = 11;
    private static String s1 = "Шла Саша по шоссе и сосала сушку.";
    
    private static String infoTpl = "[%d/%d] = ";
 
    public static void main(String[] args) throws Exception {
 
        String strReport;
        for (int i=0; s1.length() > 0; i++) {
            //how many chars it spends for the info.
            int subStrShift = getSunStrShift(i,subStrLength);
            
            //compare lengths and say about it if it needs.
            if (i == 0 && subStrShift >= subStrLength) {
                Exception e = new Exception("строка мала для такого info");
                throw e;
            }
 
            if (subStrLength-subStrShift > s1.length()) {
                strReport = String.format(infoTpl, i,s1.length()) + s1.substring(0);
                s1 = "";
            } else {
                strReport = String.format(infoTpl, i,subStrLength) + s1.substring(0, subStrLength-subStrShift);
                s1 = s1.substring(subStrLength-subStrShift);
            }
 
            System.out.println(strReport);
        }
    }
    
    private static int getSunStrShift (int subStrIndex, int subStrLength) {
        String info = String.format(infoTpl, subStrIndex, subStrLength);
        return info.length();
    }
тока к андроиду не имеет никакого отношения. :-)
там надо бы еще пару проверок доделать - вроде понятно и не сложно.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
14.12.2015, 10:40     Разбиение строки #18
Приветствую, о мои маленькие любители простыней
Java
1
2
3
4
5
int len = 5;
Matcher m = Pattern.compile("(.{" + (8-len) + "})").matcher("Шла Саша по шоссе и сосала сушку");
int count = 1;
while (m.find())
    System.out.println("[" + count++ + "/" + len + "] = " + m.group());
Pablito
2420 / 1865 / 583
Регистрация: 12.05.2014
Сообщений: 6,604
Завершенные тесты: 1
14.12.2015, 12:17     Разбиение строки #19
а-ча-ча
Java
1
2
3
        int len = 3;
        String[] arr =s.split(String.format("(?<=\\G.{%d})", len));
for (String str: arr) System.out.println(str);
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2015, 12:17     Разбиение строки
Еще ссылки по теме:

Разбиение строки - C#
есть к примеру в файле есть такие строки: 1,а,б 2,ввап,ииьб нужно разобрать каждую строку, т.е. сначала до первой запятой, потом от...

Разбиение строки... - Pascal
Текст задачки приблизительно такой: Необходимо строку из 50 букв. Программа должна разделить эту строку на 5 строк по 10 букв... т.е. к...

Разбиение строки на отдельные строки - Java SE
Всем привет, возник такой вопрос от севера к клиенту приходит строка, имеющая следующий вид String more = &quot;title/content&quot; Так вот...

Разбиение строки на слова - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { string str, s1, s2; int i; cout&lt;&lt;&quot;Enter...

Разбиение строки на слова - Java
Здравствуйте! Подскажите пожалуйста, как разбить строку на слова(не совсем годиться метод split(&quot; &quot;) или я не до конца умею им...


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

Или воспользуйтесь поиском по форуму:
umbrto
2 / 2 / 0
Регистрация: 04.02.2014
Сообщений: 71
14.12.2015, 12:17  [ТС]     Разбиение строки #20
bastrakov, это должно быть как андроид приложение
просто мне надо хотя бы с функционалом разобраться
Yandex
Объявления
14.12.2015, 12:17     Разбиение строки
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru