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

Для выделения года выпуска нужно использовать метод split

01.05.2015, 17:03. Показов 1345. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно довести до ума программу.

Для выделения года выпуска нужно использовать метод split(), но как я его могу использовать если работаю со StringBuffer. Пробовал написать по-новой, не получается. Я понимаю логику работы и представляю себе как это должно работать, но написать не получается=(

А так же для хранения считанных данных надо использовать список ArrayList. Тут я вообще потерялся. Пытался читать по-этому поводу информацию в интернете, но так ничего и не понял.

Вот код:
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
import java.util.Scanner;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
 *
 * @author Админ
 */
public class Cars {
    private static Logger log = Logger.getLogger(Cars.class.getName());
    private static File logFile = new File("D:/Java/Cars/src/cars/log.txt");
    
    public static void main(String[] args){
        
        long timestart = System.currentTimeMillis();
        try{
        BufferedReader reader = new BufferedReader(new FileReader("D:/Java/Cars/src/cars/data.txt")); //входной файл
        BufferedWriter writer = new BufferedWriter(new FileWriter("D:/Java/Cars/src/cars/data1.txt")); //выходной файл
        StringBuffer sb = new StringBuffer();//буфер для входного текста
        StringBuffer rez = new StringBuffer();//буфер для обработанного текста
        StringBuffer middle = new StringBuffer();
        
        int startPos = 0, endPos = 0, i = 0, mid = 0, carsCount = 0, sum = 0, curYear = 2015;
        
        String text = "Среднее значение:" + " ";
        
        while (true){//цикл для вычитывания файла
            String buffer = reader.readLine();
            if (buffer == null){
                break;
            }
            carsCount++;
            sb.append(buffer).append("\n");//заполняем буфер вычитанным текстом
            System.out.print (buffer + "\n");
        }
        
        while (i < sb.length()){//начало обработки
            if(Character.isDigit(sb.charAt(i))){//если символ число
                startPos = i;
                while (Character.isDigit(sb.charAt(i))){
                    i++;
                }
                endPos = i;
                
                String string;
                int year = 0;
                
                rez.append(sb.toString().substring(startPos, endPos)).append("\n");//заполняем выходной буфер
                
                string = sb.toString().substring(startPos, endPos);
                
                year = Integer.parseInt(string);//из String в int
                sum += year;
                
                
            }
            else{
                rez.append("");//если символ не число
            }
            i++;
        }
        
        mid = curYear - sum / carsCount;//считаем среднее значение
        middle.append(mid);//заполняем еще один буфер
        //записываем в файл текст
        writer.write(rez.toString());
        writer.write(text + middle.toString());
        
        System.out.println(rez.toString());
        System.out.println("Среднее значение:" + " " + mid + " " + "Кол-во машин:" + " " + carsCount);
        
        writer.flush();
        writer.close();
        reader.close();
        }
        catch(Exception e){
            System.err.println("Ошибка в коде:" + " " + e);//так 
            log.log(Level.SEVERE, "Exception: ", e);//или так
        }
        //время работы
        long timeend = System.currentTimeMillis();
        System.out.print("Время работы программы:" + " ");
        System.out.println(timeend-timestart);
    }
    
}
P.S. По задаче требуется найти средний год выпуска машин.
В .txt файле примерно такое написано:
Жигули-2005
Шкода-2013
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.05.2015, 17:03
Ответы с готовыми решениями:

В библиотеке имеется 5 методичек выпуска 1992 года и 9 методичек по той же теме выпуска 1996 года
В библиотеке имеется 5 методичек выпуска 1992 года и 9 методичек по той же теме выпуска 1996 года. Библиотекарь выдает на группу 6...

Программа для определения года выпуска монеты
Ребят необходима программа которая будет определять,год выпуска монеты.Если есть у кого такая программа или мысли по этому поводу,напишите...

Метод split - выдается ошибка Uncaught TypeError: Cannot read property 'split' of undefined
Вот кусок кода CheckLinkText: function(val, f){ if(!$('#attach_lnk_stared').val()){ matches = val.split('http://'); url =...

7
 Аватар для Sanan07
284 / 264 / 173
Регистрация: 27.07.2014
Сообщений: 584
01.05.2015, 18:53
Лучший ответ Сообщение было отмечено P_BY как решение

Решение

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
 static ArrayList<Integer> getYears(String path) {
 
         ArrayList<Integer> years = new ArrayList<>();
 
         try (BufferedReader reader = new BufferedReader(new FileReader(new File(path)))) {
 
             String S = null;
 
             while ((S=reader.readLine())!=null) {
 
                 String [] SS = S.split("-");
                 years.add(Integer.parseInt(SS[1]));
 
             }
 
         } catch (IOException e) {
             e.printStackTrace();
         }
 
         return years;
     }
 
 
    static int avgOfYears(List<Integer> list) {
 
        int sum = 0;
 
        for (int n : list) {
            sum+=n;
        }
 
      return sum/list.size();
    }
1
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 15
01.05.2015, 22:41  [ТС]
Sanan07, ругань на строчку:
Java
1
years.add(Integer.parseInt(SS[1]));
А конкретно на единичку в SS.

Мой вариант:
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
import java.util.Scanner;
 
public class Cars {
    private static Logger log = Logger.getLogger(Cars.class.getName());
    
    public static void main(String[] args){
        
        long timestart = System.currentTimeMillis();
        ArrayList<Integer> years = new ArrayList<>();
        try{
        BufferedReader reader = new BufferedReader(new FileReader("D:/Java/Cars/src/cars/data.txt")); //входной файл
        BufferedWriter writer = new BufferedWriter(new FileWriter("D:/Java/Cars/src/cars/data1.txt")); //выходной файл
        StringBuffer sb = new StringBuffer();//буфер для входного текста
        StringBuffer rez = new StringBuffer();//буфер для обработанного текста
        StringBuffer middle = new StringBuffer();
        
        String text = "Среднее значение:" + " ";
        
        String buffer = null;
        while ((buffer = reader.readLine()) != null){//цикл для вычитывания файла
            String parseStr[] = buffer.split("-");
            years.add(Integer.parseInt(parseStr[1]));
            
        }
        
        System.out.println(midAge(years));
        
        middle.append(midAge(years));//заполняем еще один буфер
        //записываем в файл текст
        writer.write(text + midAge(years));
       
        writer.flush();
        writer.close();
        reader.close();
        }
        catch(Exception e){
            System.err.println("Ошибка в коде:" + " " + e);//так 
            log.log(Level.SEVERE, "Exception: ", e);//или так
        }
        //время работы
        long timeend = System.currentTimeMillis();
        System.out.print("Время работы программы:" + " ");
        System.out.println(timeend-timestart);
    }
 
    
static int midAge(List<Integer> list) {
 
        int sum = 0, curYear = 2015;
 
        for (int n : list) {
            sum += n;
        }
 
      return curYear - sum / list.size();
    }
}
0
 Аватар для Sanan07
284 / 264 / 173
Регистрация: 27.07.2014
Сообщений: 584
02.05.2015, 18:50
Все проверял работает нормально. Содержание текстового файла :
Жигули-2005
Шкода-2013
Ламборгини-2008
Феррари-2012
Рено-1995
Фиат-1999
Инфинити-2003
Лотус-2001
Лексус-2015
1
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 15
02.05.2015, 19:22  [ТС]
Sanan07, я понял. Ошибка была в содержании текстового файла. У меня написано на самом деле так:
Первая_машина: марка="Жигули" год_выпуска=2003г
Вторая_машина: марка="Ауди" год_выпуска=2014г
Третья_машина: марка="Форд" год_выпуска=2014г

Я, если честно, даже и не думал, что это может повлиять на работоспособность программы.
Это как-нибудь реально исправить?
0
 Аватар для Sanan07
284 / 264 / 173
Регистрация: 27.07.2014
Сообщений: 584
02.05.2015, 19:42
P_BY, конечно реально
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 static ArrayList<Integer> getYears(String path) {
 
        ArrayList<Integer> years = new ArrayList<>();
 
        try (BufferedReader reader = new BufferedReader(new FileReader(new File(path)))) {
 
            String S = null;
 
            while ((S=reader.readLine())!=null) {
 
                String [] SS = S.split("[а-яА-Я_=:/\",\\s]+");
                years.add(Integer.parseInt(SS[1]));
 
            }
 
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        return years;
    }
1
0 / 0 / 0
Регистрация: 23.02.2015
Сообщений: 15
04.05.2015, 12:50  [ТС]
Sanan07, не могу понять по какому принципу выставляются параметры в split(). Если, например, формат входных данных сделать таким: машина1: марка="Жигули" год_выпуска=2003, то будет считаться бред, а не средний возраст автомобилей. Не могли бы Вы объяснить?)
0
 Аватар для Sanan07
284 / 264 / 173
Регистрация: 27.07.2014
Сообщений: 584
04.05.2015, 17:54
P_BY, тогда поменяйте на это. Принцип такой,что убираем все возможные лишние знаки кроме цифр и с учетом того, что год выпуска будет последним числом в строке, мы добавляем его в список
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static ArrayList<Integer> getYears(String path) {
 
        ArrayList<Integer> years = new ArrayList<>();
 
        try (BufferedReader reader = new BufferedReader(new FileReader(new File(path)))) {
 
            String S = null;
 
            while ((S=reader.readLine())!=null) {
 
                String [] SS = S.split("[а-яА-Яa-zA-Z_=:/\",!.?\\(\\)\\s]+");
                
                years.add(Integer.parseInt(SS[SS.length-1]));
 
            }
 
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        return years;
    }
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2015, 17:54
Помогаю со студенческими работами здесь

Какую бесплатную среду (IDE) разработки для С++ 2013/2014 года выпуска лучше скачать?
Существуют множество как и бесплатные, так и платные среды разработок для С++ , но что делать, если вы можете скачать только один раз и то...

Вывести список самых новых и самых старых машин для каждой из стоянок,с указанием их владельцев и года выпуска
&quot;В районном обществе автолюбителей имеются сведения об N автомобилях.О каждой машине известно:фамилия владельца,год выпуска и номер...

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

Изменить способ выделения памяти для массива (вместо new использовать malloc)
#include &quot;stdafx.h&quot; #include &quot;stdlib.h&quot; struct str_Team{ char Komanda; int Ochki; int Gold; int Silver; int...

Какие переменные типа CARS можно использовать для выделения динамической памяти?
Всем привет! Помогите плиз ответить на вопросы!( Вижу, что тут обсуждают в основном программы, но их я по примерам сделала, а вот с...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
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
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru