StringBuilder substring和reverse - Java

3

有人可以帮我编写一个Java方法,它接受一个字符串的子串,将其反转并打印输出吗?

我猜使用StringBuilder比String更好,但我的问题是StringBuilder.substring()返回一个String。继续使用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());
}
5个回答

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();
 }

后者不起作用。我需要创建一个新的StringBuilder对象,然后进行反转。 - TheCoder
@heyya99 如果你用我的答案解决了问题,请接受它作为答案。 - PSR
我认为这太过复杂了。我认为我可以使用字符串使它变得不那么复杂。 - TheCoder

0

只需要颠倒你的操作:

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

0

你的答案已经足够好了。如果你想使用子字符串方法,这个也可以工作。

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

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索引,您可以通过重新映射索引值轻松实现此目的。

以下是一个符合您要求的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)));
}

谢谢,但我需要被评分,所以我需要它尽可能简单。我担心你的解决方案复杂度会对我产生负面影响。 - TheCoder
其实很简单,只是根据反向计算索引。最简单的方法是使用您自己的方法,但是不需要第一个字符串构建器,只需使用:String input = "abcdefgh"; - BlackBox

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接