2015-08-31 2 views
0

Я практикую Java на CodingBat.com, и у меня есть проблема.для цикла доходит до конца строки

zipZap ("azbcpzpp") возвращает "azbcpzpp". Ожидается возвращение "azbcpzp"

Благодарности

// http://codingbat.com/prob/p180759 
// Look for patterns like "zip" and "zap" in the string -- length-3, 
// starting with 'z' and ending with 'p'. Return a string where for 
// all such words, the middle letter is gone, so "zipXzap" yields "zpXzp". 

public String zipZap(String str) { 
    if (str.length() < 2) 
    return str; 

    String result = str.substring(0, 1); 

    for (int i=1; i < (str.length()-1) ; i++) { 
    if ((str.charAt(i-i) != 'z') || (str.charAt(i+1) != 'p')) 
     result += str.charAt(i); 
    } 

    result += str.substring(str.length()-1); 

    return result; 
} 
+0

Кроме того, вы можете попробовать использовать регулярное выражение. '/ z \ wp/gi' –

ответ

2

изменить, если условие if ((str.charAt(i - 1) != 'z') || (str.charAt(i + 1) != 'p')). В противном случае вы всегда проверить, если символ с индексом 0 равен «г», потому что i-i всегда 0.

public static String zipZap(String str) 
{ 
    if (str.length() < 2) 
     return str; 

    String result = str.substring(0, 1); 

    for (int i = 1; i < (str.length() - 1); i++) 
    { 
     if ((str.charAt(i - 1) != 'z') || (str.charAt(i + 1) != 'p')) 
      result += str.charAt(i); 
    } 

    result += str.substring(str.length() - 1); 

    return result; 
} 

Input: azbcpzpp 
Output: azbcpzp 
+0

Также должно быть' && 'else, если даже одно верно. –

+0

Это очень хороший улов ... :) +1 – Codebender

Смежные вопросы