Сравнение двух строк через перебор символов
Необходимо сравнить 2 строки, возможно ли как-то упростить код ниже, используя перебор символов?
import java.util.*;
class Meth{
public static void abc(StringBuilder sb1, StringBuilder sb2){
String s1 = sb1.toString();
String s2 = sb2.toString();
if(s1.length()==s2.length()){
for(int i = 0;i<s1.length();i++){
char c1 = s1.charAt(i);
char c2 = s2.charAt(i);
if(c1!=c2){
System.out.print("words aren't equals");
return;
}
}
System.out.print("words are equals");
return;
}
System.out.print("words aren't equals");
}
}
public class Main {
public static void main(String[] args) throws Exception {
Meth m = new Meth();
StringBuilder sb1 = new StringBuilder("Hellosgs");
StringBuilder sb2 = new StringBuilder("Hello");
Meth.abc(sb1,sb2);
}
}
Ответы (1 шт):
Автор решения: tym32167
→ Ссылка
Во первых, если вы хотите проверить 2 строки на равенство, вам нужна функция, которая принимает 2 строки и возвращает true/false. У вас вместо этого какая ту функция, которая принимает StringBuilder (не строку) и не возвращает ничего.
Далее, вас есть такая конструкция
if(s1.length()==s2.length()){
for(int i = 0;i<s1.length();i++){...}
}
Она увеличивает уровень вложенности вашего кода, что увеличивает его сложность. Чтобы уменьшить сложность, надо инвертировать условие
if(s1.length()!=s2.length()){ строки не равны, возврат из функции}
for(int i = 0;i<s1.length();i++){...}
Вы также не проверяете ваши данные на null.
Собирая все вместе получим что то типа
public static boolean Compare(String s1, String s2){
if (s1 == null && s2 == null) return true;
if (s1 == null || s2 == null) return false;
if (s1.length()!=s2.length()) return false;
for(int i=0; i<s1.length(); i++)
if (s1.charAt(i)!=s2.charAt(i)) return false;
return true;
}
Проверка может быть вот такой
public static void main(String[] args) {
boolean match = Compare("string 1", "string 2");
if (match)
System.out.println("equals");
else
System.out.println("not equals");
}