Я пытаюсь заставить этот код работать быстрее. С большими струнами это занимает слишком много времени. Я не знаю много о многопоточности, но я хотел бы попытаться разделить его на потоки, чтобы помочь получить более быстрые результаты, но я не совсем понимаю, как это сделать.
С чего начать и что я могу сделать?
Следующий код просматривает строку, пытаясь найти подстроки, которые вводятся вручную.
Первая строка запрашивает строку.
Вторая строка запрашивает количество строк, которые вы попытаетесь найти,
затем вы вводите строки, которые вы ищете, которые не длиннее 4 и не короче 1.
В выводе вы получите, сколько раз подстрока была в строке.
BufferedReader br;
br = new BufferedReader(new InputStreamReader(System.in));
String getLine = br.readLine();
if (getLine.length() < 1 || getLine.length() > 1000000) {
getLine = br.readLine();
}
getLine = getLine.toUpperCase();
String helpNumber = br.readLine();
int number = Integer.parseInt(helpNumber);
if(number < 1 || number > 100000){
helpNumber = br.readLine();
number = Integer.parseInt(helpNumber);
}
String[] shortCuts = new String[number];
for (int i = 0; i < number; i++) {
shortCuts[i] = br.readLine();
if(shortCuts[i].length()>=1 && shortCuts[i].length()<=4) {
shortCuts[i] = shortCuts[i];
shortCuts[i] = shortCuts[i].toUpperCase();
}else i--;
}
for (int i = 0; i < number; i++) {
System.out.println(count(getLine, shortCuts[i]));
}
}
private static int count(final String string, final String substring) {
int count = 0;
int index = 0;
while ((index = string.indexOf(substring, index)) != -1) {
index++;
count++;
}
return count;
}
Я хочу, чтобы этот код работал быстрее.