给定一个字符串:“这是一个测试”
我编写了一个程序来反转字符串中的单词,因此得到以下输出:“ test a is this”
这是我在Java中的代码:
public class stringreversals {
public static void main(String[] args){
String str = "This is a test";
System.out.println(str);
reverseWordInAString(str);
System.out.println(str);
}
static void reverseWordInAString(String str){
char[] array = str.toCharArray();
int length = array.length;
reverseString(array, 0, length-1);
int i=0, start=0;
while(i<=length){
if(array[i]!=' '){
i++;
}
else{
reverseString(array, start, i-1);
start = i+1;
}
}
}
static void reverseString(char[] array, int start, int end){
int i=0, j=0;
char c;
for(i = start, j =end; i< j; i++, j--){
c = array[i];
array[i] = array[j];
array[j] = c;
}
}
}
每次我运行它时,它只打印第一个字符串,但由于某种原因却不打印第二个字符串。
有几个值得注意的问题,首先是您while-loop
的reverseWordInAString(String)
方法...
while(i<=length){
if(array[i]!=' '){
i++;
}
else{
reverseString(array, start, i-1);
start = i+1;
}
}
此循环将导致无限循环,因为当您检测到空格时,您永远不会增加i
,这意味着它始终卡在空格字符上
我们可以通过i
在每个循环中始终增加值来解决此问题,例如...
while (i <= length) {
if (array[i] == ' ') {
reverseString(array, start, i - 1);
start = i + 1;
}
i++;
}
但是,等等,现在我们有一个IndexOutOfRange
例外。这是由于以下事实造成的:数组0
在Java中建立了索引(第一个元素是0
),但是我们允许循环运行直到i
== length
(但可索引范围是length - 1
)
我们可以通过执行以下操作来解决此问题:
while (i < length) {
if (array[i] == ' ') {
reverseString(array, start, i - 1);
start = i + 1;
}
i++;
}
输出test a is sihT
...好吧,但是最后一个单词不反转...
这是因为当循环存在时,我们实际上并没有反转这个词...
我们可以通过添加以下内容来解决此问题:
if (start < i) {
reverseString(array, start, i - 1);
}
在while-loop
退出之后...
但这仍然不会String
在main
方法中显示,要做到这一点,我们需要从方法中返回反转的结果...
static String reverseWordInAString(String str) {
char[] array = str.toCharArray();
int length = array.length;
reverseString(array, 0, length - 1);
int i = 0, start = 0;
while (i < length) {
if (array[i] == ' ') {
reverseString(array, start, i - 1);
start = i + 1;
}
i++;
}
if (start < i) {
reverseString(array, start, i - 1);
}
return new String(array);
}
然后将结果分配给调用方法中的变量...
str = reverseWordInAString(str);
System.out.println(str);
现在,说了这么多,您可以简单地使用String#split
并传递它" "
(空空间),它将返回String
该空间上拆分的数组中的所有元素,您可以使用与反转原始对象相同的技术来反转原始对象String
的位置。每个字...节省一些时间和麻烦...但这就是我...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句