Задание: нужно проверить, содержится ли в первой строке вторая строка и вывести "Содержится" или "Не содержится". Использовать стандартные методы нельзя.
Пример:
Пользователь вводит строку (мама мыла раму) и вторую строку для проверки (му)
Вывод: Содержит
Добавлю еще кое что. Я новичок во всем) и тут первый раз и в программировании то же. Обучаюсь. Чем проще будут предложения тем лучше для меня (я хотя бы разберусь что вы предлагаете).
Это мой код. Он выдает ошибку. Нельзя использовать встроенные методы такие как
contains
, indexOf
и другие, нужен примитивный способ через циклы.
import java.util.Scanner;
public class Proba
{//проверка, содержится ли в первой строке вторая строка
public static void main(String[] args)
{
String lineOne;
String lineTwo;
int flag = -1;
Scanner sc = new Scanner(System.in);
System.out.println("Напишите первый текст");
lineOne = sc.nextLine();
System.out.println("Напишите второй текст");
lineTwo = sc.nextLine();
char[] lo = lineOne.toCharArray();
char[] lt = lineTwo.toCharArray();
for (int i = 0; i < Math.max(lo.length, lt.length); i++)
{
if (lo[i] == lt[i])
{
flag = 0;
break;
}
}
if (flag != 0)
{
System.out.println("YES");
}
else
{
System.out.println("NO");
}
}
}
Можно так попробовать. У вас цикла не верно работал. Он после проверки первых символов сразу шел в break
. Тут только двойной цикл нужен
import java.util.Scanner;
public class Proba {//проверка, содержится ли в первой строке вторая строка
public static void main(String[] args) {
String lineOne;
String lineTwo;
int flag = 0;
Scanner sc = new Scanner(System.in);
System.out.println("Напишите первый текст");
lineOne = sc.nextLine();
System.out.println("Напишите второй текст");
lineTwo = sc.nextLine();
sc.close();
char[] lo = lineOne.toCharArray();
char[] lt = lineTwo.toCharArray();
for (int i = 0; i < lo.length; i++) {
if (lo[i] == lt[0]) {
for (int m = i, n = 0; m < lo.length && n < lt.length; m++, n++) {
if (lo[m] != lt[n]) {
flag = 0;
break;
} else {
flag++;
}
}
if (flag == lt.length) {
break;
}
}
}
if (flag > 0) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
String str = "мама мыла раму";
str.contains("му")
UPD: Раз использовать стандартные методы нельзя, то проверить можно например регуляркой:
Pattern.compile("му").matcher(str).find()
UPD2: Если нужен именно цикл - то вот набросал код (не проверял):
String[] str = "мама мыла раму".split("");
String[] find = "му".split("");
int num = 0;
boolean isContains = false;
for ( int i = 0; i < str.length; i++ ){
if (str[i].equals(find[num]) ) num++;
else num = 0;
if ( num >= find.length ){
isContains = true;
break;
}
}
if ( isContains ) System.out.println("Содержит");
else System.out.println("Не содержит");
Долго ломал голову как можно сделать более простой код для решения данной задачи! Ответ нашелся.
import java.util.Scanner;
public class Test3
{//поиск подстроки в строке
public static void main(String[] args)
{
String lineOne;//первая основная строка с текстом
String lineTwo;//поисковая строка подтекста
boolean flag = true;//флаг выдает ответ истинно выражение или ложно
Scanner sc = new Scanner(System.in);//запускаем сканер
System.out.println("Напишите первый текст");
lineOne = sc.nextLine();//записываем основную строку
System.out.println("Напишите второй текст");
lineTwo = sc.nextLine();//записываем поисковую строку
char[] lo = lineOne.toCharArray();//преобразовываем объект String в char (разбиваем на знаки)
char[] lt = lineTwo.toCharArray();//преобразовываем объект String в char (разбиваем на знаки)
for (int i = 0; i <= lo.length - lt.length; i++)//задаем размер поисковой строки
{
flag = true;
for (int j = 0; j < lt.length; j++)//проверяем совпадают ли знаки первой строки со знаками из второй строки
{
if(lo[i + j] != lt[j])//если знаки не совпадают
{
flag = false;//флаг помечаем как ложный
break;//прерываем проверку, переходим обратно в цикл for и проверяем следующий знак
}
}
if (flag)//если нашли совпадение то флаг остается истиной
{
break;//прерываем процесс
}
}
if (!flag)//в зависимости от состояния флага (false/true) выводим результат
{
System.out.println("Не содержит");
}
else
{
System.out.println("Содержит");
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Вопрос, вот кусок кода, подскажите пожалуйста, как можно сделать что-бы метод clone вызывался и клонировал объект? ) Интересует именно вариант...