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

Изменить вывод в программе

18.02.2015, 21:34. Показов 856. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Помогите пожалуйста. Тут программа которая ищет подстрок и выводит количество совпадении. Но мне надо что бы он выводил первую попадавшую совпадению.

(Программу писал Санан)
(модераторы я не смог писать код с помощью редактора)


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
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
 
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
 
/**
 *
 * @author Sanan
 */
public class Lab {
    
    static String S;
    static int n ;
    
        public static void main(String[] args) {
            
            Scanner s = new Scanner(System.in);
            
            S=s.next();
            n=findSubStringFromFile(S);
            System.out.println("В файле найдено " +n +" подстрок(и)");
                    
        
    } 
          
                
        static int countOfSubstrings (String stroka,String sub) {
            
            int cout = 0;
            
            for(int i=0;i<stroka.length();i++) {
                for(int j=i;j<stroka.length();j++) {
                    String S1 = stroka.substring(i, j+1);
                    if(S1.equals(sub)) {
                        cout++;
                    }
                }
            }           
            return cout;
        }
        
        static int findSubStringFromFile(String stroka) {
            
            BufferedReader reader = null;
            int sum = 0;
                
            try {
                
                reader = new BufferedReader(new FileReader("input.txt"));
                
                String S = null;
                                
                
                while((S = reader.readLine())!=null) {
                    
                    String [] SS  = S.split("[0-9\\s,.!??!!?-_+=—]+");
                    
                    for(String S1 : SS) {
                            sum+=countOfSubstrings(S1, stroka);
                    }
                            
                }
            }
             catch(IOException e) {
                 e.printStackTrace();
             }
            
            finally {
                try {
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            
            return sum;
        }
       
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2015, 21:34
Ответы с готовыми решениями:

Изменить вывод в программе
Программа решает логическую задачу о миссионерах и каннибалах. Условие: Три миссионера и три...

Как в этой программе изменить то что во вкладке "о программе"
Здравствуйте, уважаемый народ. Подскажите как в этой программе изменить то что во вкладке &quot;о...

Изменить путь к программе
Добрый вечер есть такая проблема, в системе установлен пакет, но я установил еще один такой же но...

Что изменить в программе?
Что нужно изменить в программе или добавить чтобы была возможность работать не с одной а с...

2
17 / 17 / 7
Регистрация: 05.09.2012
Сообщений: 246
19.02.2015, 13:57 2
Если с минимальными изменениями то вот так (названия переменных не менял, и структуру сохранил практически как она была)
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
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
 
public class Lab {
 
    static String S;
    static int n;
    static int strN = 0;
    static boolean flag = false;
 
    public static void main(String[] args) {
 
        Scanner s = new Scanner(System.in);
 
        S = s.next();
        System.out.println(S);
        n = findSubStringFromFile(S);
        if (n != -1) {
            System.out.println("В файле найдено совпадение в строке " + strN + "  символ " + n);
        } else {
            System.out.println("Совпадений не найдено");
        }
 
    }
 
    static int countOfSubstrings(String stroka, String sub) {
        
        int cout = -1;
 
        for (int i = 0; i < stroka.length(); i++) {
            for (int j = i; j < stroka.length(); j++) {
                String S1 = stroka.substring(i, j + 1);
                
                if (S1.equals(sub)) {
                    flag = true;
                    return i + 1;
                }
            }
        }
        return cout;
    }
 
    static int findSubStringFromFile(String stroka) {
 
        BufferedReader reader = null;
        int sum = 0;
 
        try {
 
            reader = new BufferedReader(new FileReader("input.txt"));
 
            String S = null;
 
            while (((S = reader.readLine()) != null) & flag == false) {
                strN++;
                sum = countOfSubstrings(S, stroka);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
 
        return sum;
    }
 
}
Но я бы так не делал. Слишком много прогонов при сравнении получается. Например получив искомую строку в 5 символов нету смысла сравнивать её с строкой в 1 символ, потом 2 символа, потом 3 и так далее символов. При больших файлах это будет ощутимо думаю.

Добавлено через 7 часов 15 минут
Вот еще варинт
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.io.*;
import java.util.Scanner;
 
public class Lab {
 
    public static void main(String[] args) {
        String str;
        boolean flag = false;
        int c;
        String srch;
        int strCount = 0;
        int charCount = 0;
 
        Scanner s = new Scanner(System.in);
        
        srch = s.next();
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(new FileInputStream("input.txt")))) {
            one:
            {
                while ((str = br.readLine()) != null) {
                    strCount++;
                    flag = false;
                    charCount = 0;
                    StringReader sr = new StringReader(str);
 
                    StringBuilder sbld = new StringBuilder("");
                    for (int i = 0; i < srch.length(); i++) {
                        sbld.append((char) sr.read());
                    }
 
                    for (int i = srch.length(); i < str.length() + 1; i++) {
                        if (sbld.toString().equals(srch)) {
                            flag = true;
                            System.out.println("Строка " + strCount + " : "
                                    + " cовпадение найено под номером " + charCount);
//                        break one;
                        }
                        sbld.deleteCharAt(0);
 
                        c = sr.read();
                        sbld.append((char) c);
                        charCount++;
                    }
                    if (!flag) {
                        System.out.println("Строка " + strCount + " : "
                                + " совпадений не найдено.");
                    }
                }
            }
        } catch (IOException e) {
            System.out.println("File not found");
        }
 
    }
 
}
если уберете комментарий со строки break one; то будет выводить только 1 вариант первого совпадения. Если как есть - то выводит номер строки и символа для каждого совпадения
0
0 / 0 / 0
Регистрация: 10.02.2015
Сообщений: 12
23.02.2015, 12:47  [ТС] 3
благодарю за помощь.
0
23.02.2015, 12:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.02.2015, 12:47
Помогаю со студенческими работами здесь

Изменить слово в программе
Хост-компьютер - компьютер, соединённый непосредственно с Internet. Нужно поменять слово...

Изменить кодировку в программе
Здравствуйте. Логика программы написана, и английский алфавит на английский она заменяет, а...

Что изменить в программе?
Что изменить в программе чтобы можно было работать с несколькими записями благодаря указателям на...

Изменить массив в программе на статический
Нужно изменить массив на статический,как это сделать? #include &quot;stdafx.h&quot; #include &lt;iostream&gt;...

Нужно изменить строки в программе
Ребят, я вообще не шарю в программировании, нужна ваша помощь, скачал софт, и он требует что бы...

Изменить положение Label в программе
Здравствуйте подскажите пожалуйста какой код нужно добавить чтобы изменить положение Label?...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru