通过反向循环(来自str.length-1-> 0)连接原始字符串可以完成反转字符串
但为什么这不能正常工作: 通过从最后位置到第0位添加字符:
int i = 0;
while(i<originalStr.length())
{
strRev.charAt(i)=originalStr.charAt(str.length()-1-i);
i++;
}
答案 0 :(得分:7)
字符串在Java中是不可变的。你无法编辑它们。
如果您想要反转字符串以进行培训,可以创建char[]
,对其进行操作,然后从String
实例化char[]
。
如果你想为了专业目的而反转String,你可以这样做:
String reverse = new StringBuilder(originalStr).reverse().toString();
答案 1 :(得分:2)
strRev.charAt(i) // use to Retrieve what value at Index. Not to Set the Character to the Index.
我们都知道String
是Java中的immutable
类。每次如果您尝试修改任何String
对象,它都会创建一个新对象。
eg :- String abc = "Vikrant"; //Create a String Object with "Vikrant"
abc += "Kashyap"; //Create again a new String Object with "VikrantKashyap"
// and refer to abc again to the new Object.
//"Vikrant" Will Removed by gc after executing this statement.
最好使用StringBuffer
或StringBuilder
执行反向操作。这两个类之间唯一的区别是
A) StringBuffer 是线程安全(已同步)。有点慢,因为每次都需要检查Thread Lock。
B) StringBuider 不是线程安全的。因此,它为您提供了更快的结果,因为它不是
Synchronized
。
有几个第三方罐子为您提供Reverse
等功能以及更多字符串基础操作Methods
import org.apache.commons.lang.StringUtils; //Import Statement
String reversed = StringUtils.reverse(words);
答案 2 :(得分:0)
在您的测试方法中,最佳做法是使用AAA模式:
安排所有必要的先决条件和输入
根据被测对象或方法采取行动
断言预期结果已经发生。
@Test
public void test() {
String input = "abc";
String result = Util.reverse(input);
assertEquals("cba", result);
}