2013-04-08 91 views
3

任何人都可以幫助我寫一個Java方法,它接受一個字符串的子字符串,反轉它並打印結果?StringBuilder子字符串和反向 - Java

我猜StringBuilder比字符串更好,但我的問題是StringBuilder.substring()返回一個字符串。要繼續使用StringBuilder,我需要創建一個新的StringBuilder對象來完成StringBuilder.reverse()部分。

任何人都有更好的解決方案嗎?

public static void main(String[] args) { 
    StringBuilder sb = new StringBuilder("abcdefgh"); 

    sb = new StringBuilder(sb.subSequence(2, 5)); 

    sb.reverse(); 
    System.out.println(sb.toString()); 
} 

回答

1

您可以使用此

public String reverseString(String normalString) { 
    StringBuilder sb = new StringBuilder(); 
    for(int i = normalString.length() - 1; i >= 0; --i) 
    sb.append(normalString.charAt(i)); 
    return sb.toString(); 
} 
+0

後者不起作用。我需要創建一個新的StringBuilder對象然後反向。 – TheCoder 2013-04-08 11:06:43

+0

@ heyya99如果你的答案是我的答案,請接受這個作爲anser – PSR 2013-04-08 11:08:21

+0

我認爲這太複雜了。我想我可以使用一個字符串來減少它的複雜性。 – TheCoder 2013-04-08 11:34:54

0

你可以嘗試這樣的事情:

String s = "Achintya"; 
List<String> myList = new ArrayList<String>(Arrays.asList(s.split(""))); 
Collections.sort(myList, Collections.reverseOrder()); 
System.out.println(myList); 
0

如果你的願望是讓用戶輸入的非反轉startend indicies字符串,您可以通過重新映射索引值輕鬆實現此目的。

下面是1 StringBuilder工作的例子,你問:

public static void main(String[] args) { 
    final StringBuilder sb = new StringBuilder("abcdefgh"); 
    final int startIndex = 2; 
    final int endIndex = 5; 

    sb.reverse(); 
    final String output = substring(sb.toString(), startIndex, endIndex); 
    System.out.println("Result: " + output); 
} 

//Retrieve the substring of a reversed string 
private static String substring(String input, int start, int end) { 
    start = map(start, 0, input.length(), input.length(), 0); 
    end = map(end, 0, input.length(), input.length(), 0); 

    String substring = input.substring(end, start); 
    return substring; 
} 

//Map value from the min,max range, to the new minRange-maxRange range. 
private static int map(float value, float min, float max, float minRange, float maxRange) { 
    return Math.round(minRange + (maxRange - minRange) * ((value - min)/(max - min))); 
} 
+0

謝謝,但我被標記在這,我需要它儘可能簡單。我擔心你的解決方案的複雜性會對我不利。 – TheCoder 2013-04-08 12:55:44

+0

真的很簡單,它只是計算與相反相關的指標。最簡單的是你的,而不是你剛纔使用的第一個String構建器:'String input =「abcdefgh」;' – BlackBox 2013-04-08 13:13:21

0

你的回答是不夠好。如果您想使用的子方法這也將工作,

public static void main(String[] args) 
{ 
StringBuilder revWord = new StringBuilder("abcdefgh".substring(2,5)); 
revWord.reverse(); 
System.out.println(revWord); 
} 
0

只需按您的操作:

StringBuilder sb2 = new StringBuilder("abcdefgh"); 
sb2.reverse(); 
System.out.println(sb2.subSequence(sb2.length()-5, sb2.length()-2));