2013-03-17 3 views
-3

Я пишу код, чтобы увидеть, есть ли xyz в середине данной строки. Это работает, если xyz появляется один раз, но когда он появляется более одного раза, он не всегда будет работать.Код не работает должным образом - посредине слова

public boolean xyzMiddle(String str) { 
    if (str.length() <= 2) { 
    return false; 
    } 
    int count1 = 0; 
    int count2 = 0; 
    for (int i=(str.length()-2)/2; i<str.length()-2; i++) { 
    if (str.substring(i, i+3).equals("xyz")) { 
     count1 = str.substring(0, i).length(); 
     count2 = str.substring(i+3).length(); 
    } 
    } 
    if (count1 == count2 || count1+1 == count2 || count2+1 == count1) { 
    return true; 
    } 
    return false; 
} 
+0

Ваша программа возвращает 'истина', даже если вход' abcd' – Maroun

+3

Почему бы не использовать строку, содержащую метод? –

+5

Это четвертый вопрос, который вы задаете за один час. Потратьте некоторое время, чтобы подумать, отлаживать, читать javadoc, экспериментировать, а не просить других исправить ваш код. Вот как вы узнаете. –

ответ

1

Это будет работать:

int middle = (str.length() - 2)/2; 
return "xyz".equals(str.substring(middle, middle + 3)); 

Если длина str четное число, то может быть еще одно письмо, прежде чем xyz после. Если вы хотите, чтобы это было после, а не раньше, вы должны вычесть три вместо двух. Если вы хотите полностью отказаться от этого, сначала вам нужно проверить длину строки.

0

Шаг 1: Посмотрите номер Java SE 6 api docs.
Шаг 2: прочитайте запись в строке.
Шаг 3: попробуйте следующее: String.split ("xyz");

+0

, где бы я это сказал? – user2036340

+1

выполните шаги 1 и 2. – DwB

0

Ваш метод слишком сложен ... Вы должны использовать String.split («АБВ»), а затем проверить размер возвращаемого массива, а если 2, убедитесь, что обе части равны:

public boolean xyzMiddle(String str) { 
    String[] temp = str.split("xyz"); 
    return temp.length == 2 ? temp[0].length == temp[1].length : false; 
} 
Смежные вопросы