当我尝试反转字符串中的单词时,为什么我的代码不打印任何内容

拉尔夫

给定一个字符串:“这是一个测试”

我编写了一个程序来反转字符串中的单词,因此得到以下输出:“ 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-loopreverseWordInAString(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退出之后...

但这仍然不会Stringmain方法中显示,要做到这一点,我们需要从方法中返回反转的结果...

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么代码总是打印True。每当我检查是否相等但不打印给定的字符串时总是打印布尔值

为什么我的代码不打印任何内容?

为什么我的程序不打印字符串?

为什么每当我尝试执行 F 字符串时我的代码都不起作用

当我尝试用 %d 打印字符串时打印的值是什么?

为什么我的代码不打印任何内容?我的循环有问题吗?

我在java中反转给定字符串的每个单词的代码有什么问题?

当我尝试在终端中运行从我的 .java 文件创建的 .class 文件时,我没有得到任何输出。代码正在编译只是不打印

当我尝试以相反的顺序打印字符串时,为什么我的C程序会打印新的空白行?

为什么当我尝试运行与字符串操作和if / else语句相关的代码时出现2个错误,这在java btw,ty中

为什么我的python脚本不打印任何内容

为什么我的程序最后不打印任何内容?

为什么我的代码在C ++中不反转字符串?

当我尝试添加拆分后的字符串时,为什么会得到空字符串?

当我的代码尝试用我的刽子手游戏中的字母替换丢失的字母时,为什么会出现“字符串索引超出范围”

为什么当我尝试打印我正在搜索的文件的内容时出现错误?

当我尝试将函数的返回值与字符串连接时,为什么我的代码不起作用?

当该字符串不包含任何这些字符时,为什么我的字符串匹配数组中的某些内容?

为什么我的字符串的首字母不打印?

为什么这个程序不打印:当我输入任何名字时,欢迎来到丛林消息?

当我尝试访问绑定对象的属性时,为什么Xamarin不呈现任何内容?

当我尝试从字符串构建Java.utile.Date对象时,为什么会收到此错误?

当我使用指针反转C中的字符串时,如何获得正确的输出

每当我使用cin并在字符串中使用空格时,为什么它会跳过整个内容?

为什么此代码不打印任何内容?

为什么此代码不打印任何内容?

为什么我的python代码无法打印任何内容?

当我在类别按钮之后单击选择按钮时,为什么不打印String而不打印null?

为什么我的代码在提取字符串时无法在Python Regex中工作