Сравнение строк массива в java для получения логического значения

#java #arrays #string #comparison

#java #массивы #строка #сравнение

Вопрос:

Я пытаюсь написать программу, которая проверяет, совпадают ли первые две и последние две буквы строки. Например, frontAgain(«отредактировано»); должен возвращать true. Однако следующая программа работает только для 2 строк символов типа «ed». Я подумал, что это может быть проблемой сравнения объектов, поэтому я попытался использовать строки типа:

 splitstring[0].equals(splitstring[length - 2])
splitstring[0] == splitstring[length - 2]
splitstring[0].equalsIgnoreCase(splitstring[length - 2])
  

Но опять же, моя программа работала только для строк типа «ed». Есть идеи? Вот мой код:

 public class Mainjazz {

public static boolean frontAgain(String str){

    int length = str.length(); //gets length of string for later use in if statement

    String[] splitstring = str.split(""); //splits string into an array

    if((splitstring[0].equals(splitstring[length - 2])) amp;amp; (splitstring[1].equals(splitstring[length - 1]))){  //checks if first two letters = last two
        return true;
    }else{
        return false;

    }
}

public static void main(String[] args) {

    System.out.println(frontAgain("edited"));


}

}
  

РЕДАКТИРОВАТЬ: Проблема решена, спасибо 🙂

Комментарии:

1. Почему это должно работать для более чем 2 символов, когда вы сравниваете только два символа?

Ответ №1:

Основываясь на вашем алгоритме (и опубликованном вами коде), я бы использовал String.toCharArray() примерно так,

 public static boolean frontAgain(String str) {
  if (str != null amp;amp; str.length() > 1) {
    char[] chars = str.toCharArray();
    int len = chars.length;
    return chars[0] == chars[len - 2] amp;amp; chars[1] == chars[len - 1];
  }
  return false;
}
  

Ответ №2:

Если splitstring равно "abcdefgab" , то

 splitstring[0].equals(splitstring[length - 2])
  

по существу эквивалентно

 'a'.equals('a')   
  

Если вы хотите сравнить два символа, вам нужно

 int len = splitstring.length;
splitstring.substring(0, 2).equals(splitstring.substring(len - 2, len);
  

И рекомендуется убедиться, что длина строки (ненулевая) составляет по крайней мере два — и, вероятно, четыре — символа, прежде чем пытаться выполнить сравнение.

Удачи.

Комментарии:

1. Спасибо за вашу помощь. я не понимаю, почему ‘a’.equals (‘a’) не работает. это должно возвращать true, верно?

2. Правильно. Я понял вашу цель как сравнение двух символов с двумя символами. Ни одного.

Ответ №3:

 public static boolean frontAgain(String str){
        String str1 = str.substring(0,2);
        String str2 = str.substring(str.length() - 2);
        if (str1.equals(str2)) {
            return true;
        }
        else
            return false;
}
  

Будет проще сделать это таким образом, получив первые 2 символа и последние 2 символа строки, а затем сравнить их.

Ответ №4:

Надеюсь, это поможет:

 public boolean areTheSame(String mystring) {

        //if you want to compare ignoring the upper cases
        //mystring = mystring.toLowerCase();

        if(mystring.substring(0, 1).equals(
                         mystring.substring(mystring.length()-2, 
                                            mystring.length()-1))){
            return true;
        }
        else return false;

}