Программа на Java читает префикс и суффикс - PullRequest
0 голосов
/ 26 января 2012

Я ищу какой-нибудь код для чтения последних ДВУХ букв И первых ДВУХ букв одного слова и проверки их соответствия.Слова всегда будут в верхнем регистре.это код, который я до сих пор, и я очень расстроен, почему это не будет работать!извините за то, что я n00b:)

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Scanner scan = new Scanner(System.in);

    String s;
    char[] a;

    int input=scan.nextInt();
    scan.nextLine();
        for(int i=0; i<input; i++){
            a = scan.nextLine().toCharArray();


        if((a[0] == a[a.length -1]) && (a[1] == a[a.length])){
                System.out.println("MATCH");
            }else{
                System.out.println("DO NOT MATCH");
            }

        }

}

}

Первое, что я делаю, это утверждение FOR, сколько раз оно выполняется, если вам интересно ...

Ответы [ 4 ]

2 голосов
/ 26 января 2012

Попробуйте заменить это:

if((a[0] == a[a.length -1]) && (a[1] == a[a.length])){

с этим:

if((a[0] == a[a.length - 2]) && (a[1] == a[a.length - 1])){

Массивы основаны на 0 в Java, поэтому последний элемент на самом деле .length - 1. (Массив длины 3 будет иметь допустимые индексы [0, 1, 2] - не [1, 2, 3].)


Edit: Тем не менее, поскольку Брайан с тех пор поднял анте: я бы предложил один лучше, который не требует преобразования строки в массив символов - или требует создания новых строк с использованием подстроки.

String str = scan.nextLine();
if((str.charAt(0) == str.charAt(str.length() - 2)) && (str.charAt(1) == str.charAt(str.length() - 1))){

Кроме того, что произойдет, если ваша строка меньше 2 символов? (Вы можете проверить это ...)

1 голос
/ 26 января 2012

Преобразование в массив char на самом деле довольно глупо.

String line = scan.nextLine();

if (line.substring(0,2).equals(line.substring(line.length() - 2)))
{
    // it matched ...
}

Редактировать: Вы заметите, что я использую обе формы substring() выше.Первый принимает начальный и конечный индексы, а второй - только начальный индекс и простирается до конца источника String.Обратите особое внимание, что вторым аргументом версии с двумя аргументами является индекс после нужной подстроки.

1 голос
/ 26 января 2012

Вы почти у цели - вам не хватает того, что массивы индексируются с нуля, поэтому последний элемент в массиве - это [a.length-1], а предпоследний -[a.length-2]

0 голосов
/ 03 февраля 2017

Существуют булевы методы для строки, называемые StartWith- и EndWith, соответственно, для строки класса.

http://docs.oracle.com/javase/8/docs/api/

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