2014-05-26 4 views
0

Проблема: Надеюсь вызвать метод метода, результатом будет «edcba». Но реальный результат - «abcde». Метод открытия не работает хорошо. Любые предложения по его решению? Большое спасибоМетод обратного вызова

import java.io.BufferedReader; 

import java.io.IOException; 

import java.io.InputStreamReader; 


public class Reverse { 


    public static void main (String args[]) throws IOException 

    { 
      System.out.println(reve("abcde"));  
    } 


    // to reverse a string 
    public static String reve(String sentence) { 
     StringBuilder sb = new StringBuilder(sentence.length() + 1); 
     String[] words = sentence.split(" "); 
     for (int i = words.length - 1; i >= 0; i--) { 
      sb.append(words[i]).append(' '); 
     } 
     sb.setLength(sb.length() - 1); // Strip trailing space 
     return sb.toString(); 
    } 

} 
+0

Вы назвали метод Reve от вашей основной) –

+0

, что выход вы ожидаете от «Foo бар»? «rab oof» или «oof rab»? – Bohemian

ответ

1

split не поможет здесь нет пространства между символами

String[] words = sentence.split(" "); 

Использование

char[] words = sentence.toCharArray(); 

Так что вы можете получить символы из String и чем используйте цикл для изменения String, поскольку я думаю, что вы делаете это правильно, но делайте это вместо символьного массива.

Или вы можете использовать метод charAt(int i).

for (i = sentence.length()-1; i >= 0; i--) 
     sb.append(sentence.charAt(i)); 
    return sb.toString(); 

Примечание: Здесь вы можете напрямую использовать метод reverse() из StringBuilder или StringBuffer

System.out.println(new StringBuilder(stringVar).reverse().toString()); 
System.out.println(new StringBuffer(stringVar).reverse().toString()); 
1

Поскольку вы распределяете строку в пространстве. Поскольку "abcde" не имеет пробелов, split дает вам только массив с одним элементом ("abcde"), и вы добавляете его к StringBuilder.

Поскольку вы уже используете StringBuilder, вы могли бы просто сделать

public static String reve(String sentence) { 
    return new StringBuilder(sentence).reverse().toString(); 
} 
0

Вы spliting в пространстве. Так как строка "abcde" не содержит пробела, она возвращает только один элемент (целая строка).

Простым решением было бы разделить на ничего, так что вы получите каждую букву отделенный:

String[] words = sentence.split(""); 

Но наиболее рекомендуемым решением было бы преобразовать строку в char массив, потому что в этом случае , это не имеет смысла хранить символы в String массиве, так как там будет только один символ в строке:

char[] letters = sentence.toCharArray(); 
0

Должен работать нормально (используя обугленного ARRA у):

public static String reve(String sentence) { 

    char[] characters = sentence.toCharArray(); 
    int i = 0; 
    int j = sentence.length()-1; 

    while(j > i) { 
    char temp = characters[i]; 
    characters[i] = characters[j]; 
    characters[j] = temp; 
    i++;j--; 
    } 

    return new String(characters); 
} 
Смежные вопросы