Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55

Java: поделить строку пополам

19.04.2023, 11:32. Показов 723. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Вывела две части строки при помощи циклов, вывод правильный, но есть ошибка:

String is: asdf
Length is: 4
a
s

d
f
Exception in thread "main" java.lang.StringIndexOutOfBoundsExceptio n: String index out of range: 4
at java.lang.String.charAt(String.java:658)
at Zad.string12(Zad.java:379)
at Main.main(Main.java:28)

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void string12() {
        /*Scanner num = new Scanner(System.in);
        System.out.println("Enter n1 (Count of symbols for start of string: ");
        int n1 = num.nextInt();
        System.out.println("Enter n3 (Count of symbols for end of string: ");
        int n2 = num.nextInt();*/
        String str = "asdf"; //asdjkl
        System.out.println("String is: " + str);
        int size = str.length();
        System.out.println("Length is: " + size);
 
        for (int i = 0; i < size/2; i++) {
            System.out.println(str.charAt(i));
            }
        System.out.println();
        for (int i = size/2; i > 0; i++){
            System.out.println(str.charAt(i));
        }
        }
Помогите пожалуйста это исправить
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2023, 11:32
Ответы с готовыми решениями:

Поделить список пополам
Помогите, пожалуйста, с задачкой на ТурбоПрологе. Описать предикат div(A,,B). Списки А и В получаются делением центрального попалам,...

Как поделить DataTable пополам?
Помогите, пожалуйста. Есть dataTable заполненный данными. Как из него сделать два dataTable.Причем поделив исходный dataTable пополам....

GroupBox как поделить экрана пополам
Привет, Делаю программу и у меня при запуски программы, программа должна быть развернута на весь экран, я в коде приписал. я с помощью...

12
Модератор
Эксперт Java
 Аватар для alecss131
2860 / 1366 / 409
Регистрация: 11.08.2017
Сообщений: 4,376
Записей в блоге: 2
19.04.2023, 11:36
Цитата Сообщение от Diana528 Посмотреть сообщение
Java
16
for (int i = size/2; i > 0; i++){
Бесконечный цикл в котором происходит выход за длину строки
Может лучше так?
Java
16
for (int i = size/2; i < size; i++){
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
19.04.2023, 11:53
Лучший ответ Сообщение было отмечено Diana528 как решение

Решение

Так это не деление пополам. Через print, например было бы, но тоже не то. Примерно:
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
public class Main {
    public static String substring(String str, int beginIndex, int endIndex) {
        if (beginIndex < 0) {
            throw new StringIndexOutOfBoundsException(beginIndex);
        }
        if (endIndex > str.length()) {
            throw new StringIndexOutOfBoundsException(endIndex);
        }
        int subLen = endIndex - beginIndex;
        if (subLen < 0) {
            throw new StringIndexOutOfBoundsException(subLen);
        }
        char[] chars = new char[subLen];
        for (int i = beginIndex, q = 0; i < endIndex; ++i) {
            chars[q++] = str.charAt(i);
        }
        return new String(chars);
    }
 
    public static void main(String[] args) {
        String str = "asdf";
        System.out.println(substring(str, 0, str.length() / 2));
        System.out.println(substring(str, str.length() / 2, str.length()));
    }
}
Цитата Сообщение от Diana528 Посмотреть сообщение
Zad.java
Прекрасное название.
0
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
19.04.2023, 12:31  [ТС]
Цитата Сообщение от alecss131 Посмотреть сообщение
for (int i = size/2; i < size; i++){
Так делали уже, не вывел ничего.

Добавлено через 13 секунд
Цитата Сообщение от alecss131 Посмотреть сообщение
for (int i = size/2; i < size; i++){
Так делали уже, не вывел ничего.

Добавлено через 7 минут
Цитата Сообщение от Coffeini Посмотреть сообщение
Прекрасное название.


Цитата Сообщение от Coffeini Посмотреть сообщение
Так это не деление пополам. Через print, например было бы, но тоже не то. Примерно:
Мне не совсем деление нужно.
Нужно было пройтись по строке с двух сторон - слева и до середины и с середины и до всей длины.
К примеру если бы слово было "qwerty" - то в первом цикле нужно пройтись по символам - qwe, а во втором rty.
Это нужно для того, чтобы в дальнейшем написать программу: Даны слова разной длины, вы задаете для каждого слова два числа. Одно число - это количество букв с начала строки, а другое второе число - количество букв с конца строки, из которых потом должно состоять новое слово:
n1 = 2
n2 = 2
String: qwertyasd
New string: qwsd
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
19.04.2023, 12:37
Лучший ответ Сообщение было отмечено Diana528 как решение

Решение

Цитата Сообщение от Diana528 Посмотреть сообщение
Мне не совсем деление нужно.
Java
1
System.out.println(substring(str, 0, n1) + substring(str, str.length() - n2, str.length()));
0
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
19.04.2023, 12:58  [ТС]
Цитата Сообщение от Coffeini Посмотреть сообщение
System.out.println(substring(str, 0, n1) + substring(str, str.length() - n2, str.length()));
String is: zxc
Length is: 3
zxxc
String is uncorrect!

Подскажите пожалуйста, как обойти корректно случай, если слово меньше чем количество символов которые ввел пользователь?
К примеру слово - zxc, а пользователь ввел n1 = 2, n2 = 2

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 public void string12() {
        String[] words = {"asdfgh", "qwertyuio", "zxcvbbnm", "asdf", "hjkldkdk", "zxc"};
        Scanner num = new Scanner(System.in);
        System.out.println("Enter n1 (Count of symbols for start of string): ");
        int n1 = num.nextInt();
        System.out.println("Enter n2 (Count of symbols for end of string): ");
        int n2 = num.nextInt();
       for(String str : words) {
           System.out.println("String is: " + str);
           int size = str.length();
           System.out.println("Length is: " + size);
           System.out.println(substring(str, 0, n1) + substring(str, str.length() - n2, str.length()));
           if (str.length() < 5){
               System.out.println("String is uncorrect!");
           }
           System.out.println();
       }
    }
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
19.04.2023, 13:05
Лучший ответ Сообщение было отмечено Diana528 как решение

Решение

Цитата Сообщение от Diana528 Посмотреть сообщение
если слово меньше чем количество символов которые ввел пользователь?
Семантическая конструкция условие не напоминает? Так и обойти:
Java
1
if (n1 + n2 >= str.length()) System.out.println(str);
0
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
19.04.2023, 13:16  [ТС]
Цитата Сообщение от Coffeini Посмотреть сообщение
Семантическая конструкция условие не напоминает? Так и обойти:
Оказывается все настолько просто...
Спасибо!
0
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
20.04.2023, 07:07  [ТС]
Цитата Сообщение от Coffeini Посмотреть сообщение
System.out.println(substring(str, 0, n1) + substring(str, str.length() - n2, str.length()))
Добрый день!
Мне запретили использовать substring().

Дали задание сделать это через циклы. Я начала следующую логику:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
   public void string14() {
        String str = "asdfghjk";
        Scanner num = new Scanner(System.in);
        System.out.println("Enter n1: ");
        int n1 = num.nextInt();
        System.out.println("Enter n2: ");
        int n2 = num.nextInt();
        char str2, str1, str3;
 
        for (int i = 0; i < n1; i++) {
            str1 = str.charAt(i);
            System.out.println(str1);
        }
        System.out.println();
        for (int j = str.length() - 1; j >= n2; j--) {
            str2 = str.charAt(j);
            System.out.println(str2);
        }
    }
1. Для начала, прошлась по символам через цикл и он мне вывел то, что мне нужно: два первых символа.
2. Используя второй цикл, я прошлась по символам с конца до введённого пользователем числа (2), и соответственно получила эти символы. Но здесь мне нужно, получить только ДВА символа с конца, а не то что я написала. Как это сделать?
Если не сложно, можете объяснить, ТОЛЬКО этот фрагмент.
3. Затем, я хочу перевести это в строку и реверснуть ее.
4. И первые символы тоже преобразую в строку.
5. Затем, при помощи конкатенации их соединю, и получу это слово.

Пока вывод такой:
Enter n1:
2
Enter n2:
2
a
s

k
j
h
g
f
d
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
20.04.2023, 07:30
Цитата Сообщение от Diana528 Посмотреть сообщение
Добрый день!
Мне запретили использовать substring().
Мой метод не использует реальный substring, вы там вместе с ментором читать учитесь.
0
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
20.04.2023, 07:37  [ТС]
Цитата Сообщение от Coffeini Посмотреть сообщение
Мой метод не использует реальный substring, вы там вместе с ментором читать учитесь.
Но там нет циклов, поэтому докопался.
0
 Аватар для Coffeini
753 / 370 / 133
Регистрация: 01.02.2020
Сообщений: 1,096
Записей в блоге: 1
20.04.2023, 07:51
Цитата Сообщение от Coffeini Посмотреть сообщение
char[] chars = new char[subLen];
        for (int i = beginIndex, q = 0; i < endIndex; ++i) {
            chars[q++] = str.charAt(i);
        }
        return new String(chars);
А это что?
0
0 / 0 / 0
Регистрация: 26.03.2023
Сообщений: 55
20.04.2023, 07:59  [ТС]
Цитата Сообщение от Diana528 Посмотреть сообщение
public void string14() {
        String str = "asdfghjk";
        Scanner num = new Scanner(System.in);
        System.out.println("Enter n1: ");
        int n1 = num.nextInt();
        System.out.println("Enter n2: ");
        int n2 = num.nextInt();
        char str2, str1, str3;
for (int i = 0; i < n1; i++) {
            str1 = str.charAt(i);
            System.out.println(str1);
        }
        System.out.println();
        for (int j = str.length() - 1; j >= n2; j--) {
            str2 = str.charAt(j);
            System.out.println(str2);
        }
    }
А мы про это говорили.

Добавлено через 44 секунды
Цитата Сообщение от Diana528 Посмотреть сообщение
 public void string12() {
        String[] words = {"asdfgh", "qwertyuio", "zxcvbbnm", "asdf", "hjkldkdk", "zxc"};
        Scanner num = new Scanner(System.in);
        System.out.println("Enter n1 (Count of symbols for start of string): ");
        int n1 = num.nextInt();
        System.out.println("Enter n2 (Count of symbols for end of string): ");
        int n2 = num.nextInt();
       for(String str : words) {
           System.out.println("String is: " + str);
           int size = str.length();
           System.out.println("Length is: " + size);
           System.out.println(substring(str, 0, n1) + substring(str, str.length() - n2, str.length()));
           if (str.length() < 5){
               System.out.println("String is uncorrect!");
           }
           System.out.println();
       }
    }
А мы про это говорили

Добавлено через 1 минуту
Цитата Сообщение от Coffeini Посмотреть сообщение
char[] chars = new char[subLen];
        for (int i = beginIndex, q = 0; i < endIndex; ++i) {
            chars[q++] = str.charAt(i);
        }
        return new String(chars);
Так тоже нельзя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2023, 07:59
Помогаю со студенческими работами здесь

Поделить списка пополам SWI-Prolog
Доброго времени суток, Имею проблему с написанием программы. Необходимо написать предикат polowki(L,LL,LP), который делит список...

В строке поделить пополам слова длиной 4 символа
Всем здравствуйте, нужна помощь, дабы у самого не получается понять как это сделать( Вот задание: В произвольной строке длиной не более...

Машина Тьюринга. Поделить нацело пополам число, записанное в унарной системе счисления
Поделить нацело пополам число, записанное в унарной системе счисления.

Поделить массив пополам и 1 часть поставить на место 2 а 2 на место 1 части
Задан массив чисел размерности n. n(чётное). Поделить массив пополам и 1 часть поставить на место 2 а 2 на место 1 части.

Поделить строку на последовательности
«О нулях и единицах» Постановка задачи Имеется некоторая последовательность бит BIN, состоящая из хаотично размещённых нулей и единиц....


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru