2015-08-11 3 views
0

Учитывая, что строка введена, верните строку с двумя последними двумя символами. И, если строка имеет менее 2 символов, ничего не делайте и возвращайте строку ввода.Как переключить два символа в строке?

Вот код, который я написал до сих пор:

public class SwapLastChars { 

    static String testcase1 = "Hello"; 

    public static void main(String args[]) { 
     SwapLastChars testInstance = new SwapLastChars(); 
     String result = testInstance.swap(testcase1); 
     System.out.println(result); 
    } 

    public String swap(String str1) { 

     String str = ""; 
     int length = str1.length(); 
     char last = str1.charAt(length - 1); 
     char l = str1.charAt(length - 2); 
     if (length == 1) 
      return str1; 
     for (int i = 0; i < str1.length() - 2; i++) { 
      str = str + str1.charAt(i); 
     } 
     str = str + last + l; 
     return str; 
    } 
} 

Проблема в моих тестах, любая помощь?

Testcase Pass/Fail Parameters Actual Output Expected Output 

1   pass  'aabbccdd'  aabbccdd  aabbccdd 

2   fail  'A'    null   A 

3   pass  'hello'   helol   helol 
+0

Невозможно, чтобы этот код мог возвращать null при вызове с помощью 'A'. Можете ли вы показать нам свой код Testcase, поскольку этот может быть неисправен. –

+1

Можете ли вы также изменить форматирование ваших тестовых примеров для удобства чтения. –

+0

Вы уверены, что это код, который работает? Поведение не соответствует коду. Пожалуйста, добавьте основной() в свой пример кода и запустите его самостоятельно. – Arkadiy

ответ

1

Если вы передадите «A», вы получите исключение StringIndexOutOfBoundsException, а не null. Если вы не подавите его в предложении catch и не вернете null.

Quick fix. Переместите проверку длины на начало метода. Это должно решить вашу проблему.

public class SwapLastChars { 

    static String testcase1 = "A"; 

    public static void main(String args[]) { 
     SwapLastChars testInstance = new SwapLastChars(); 
     String result = testInstance.swap(testcase1); 
     System.out.println(result); 
    } 

    public String swap(String str1) { 
     if(str1 == null || str1.length() < 2) { //Move here 
      return str1; 
     } 
     String str = ""; 
     int length = str1.length(); 
     char last = str1.charAt(length - 1); 
     char l = str1.charAt(length - 2); 
     for(int i = 0; i < str1.length() - 2; i++) { 
      str = str + str1.charAt(i); 
     } 
     str = str + last + l; 
     return str; 
    } 
} 
+0

его работы спасибо за помощь @Syam S –

+0

Нет проблем .. :-) –

0

Вы должны проверить длину в самом начале своей функции.

public String swap(String str1){ 

    String str=""; 
    int length=str1.length(); 
    if (length <=2) 
     return str1; 
    char last=str1.charAt(length-1); 
    char l=str1.charAt(length-2); 
    for(int i=0;i<str1.length()-2;i++) 
    { 
     str=str+str1.charAt(i); 
    } 
    str=str+last+l; 
    return str; 
} 
0

Я знаю, что это уже есть ответ, но я чувствую OPs поменять метод можно упростить с помощью StringBuilder в:

public static String swap(String word) { 
    //Answer by Syam 
    if (word == null || word.length() < 2) { 
     return word; 
    } 

    //Create new StringBuilder 
    StringBuilder s = new StringBuilder(word); 

    //Get second last char 
    char c = s.charAt(s.length() - 2); 

    //Replace second last char with last char 
    s.setCharAt(s.length() - 2, s.charAt(s.length() - 1)); 
    //replace last char with stored char 
    s.setCharAt(s.length() - 1, c); 

    return s.toString(); 
} 

Run:

System.out.println(swap("aabbccdd")); 
System.out.println(swap("A")); 
System.out.println(swap("hello")); 

Выход:

aabbccdd 
A 
helol 

И здесь why

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