当前位置: 首页 > 知识库问答 >
问题:

Java反转句子而不是标点符号

宇文育
2023-03-14

输入:我叫鲍勃。

输出:Bob的名字是My。

我看过很多关于如何颠倒句子中的每个单词和单词顺序的例子。然而,我认为我还没有看到我想要的例子。这个论坛没有什么帮助,因为它只关注句子开头和结尾的双引号:如何颠倒字符串中的单词,但保持标点符号在正确的位置?

我试过的

public void rev2(String str) {
    String[] arrStr = str.split(" ");
    for (int i = arrStr.length - 1; i >= 0; i--) {
        if (!arrStr[i].contains(".")) {
            System.out.print(arrStr[i] + " ");
        }
    }
}

public static void main(String[] args) {
    Test t = new Test();
    t.rev2("My name is Bob.");
}

上面的代码没有按预期工作。我可能可以将每个字符串转换为char并使用Character。isAlphabet()或可能是使用模式?

我需要一些想法。提前感谢您的时间和帮助。

共有3个答案

壤驷涛
2023-03-14

如果你想要一个不那么冗长的代码:

var list = Arrays.asList("My name is Bob".split(" "));
Collections.reverse(list);
list.stream().map(str -> str.concat(" ")).forEach(System.out::print);
邹禄
2023-03-14

如果你只想把句点放在句子的末尾,你可以根据单词是否是第一个单词来打印单词后面的空格或句点,还可以通过调用substring()从最后一个单词中删除句点。比如:

public class Test {
    public void rev2(String str) {
        String[] arrStr = str.split(" ");
        for (int i = arrStr.length - 1; i >= 0; i--) {
            if (!arrStr[i].contains(".")) {
                System.out.print(arrStr[i] + (i == 0 ? "." : " "));
            } else {
                System.out.print(arrStr[i].substring(0, arrStr[i].length() - 1) + " ");
            }
        }
    }

    public static void main(String[] args) {
        Test t = new Test();
        t.rev2("My name is Bob.");
    }
}

输出:Bob的名字是My。

步博厚
2023-03-14

以下是一个在问题限制范围内有效的解决方案(其中一些是假设的):

public void rev2(String str) {
    String[] arrStr = str.split(" ");
    for (int i = arrStr.length - 1; i >= 0; i--) {
        boolean punct = i <= 0 || arrStr[i - 1].contains(".");
        if (!arrStr[i].contains(".")) {
            System.out.print(arrStr[i]);
        } else {
            System.out.print(arrStr[i].substring(0, arrStr[i].length() - 1));
        }
        System.out.print((punct ? ". " : " "));
    }
}

public static void main(String[] args) {
    Tester t = new Tester();
    t.rev2("My name is Bob. I am happy.");
}

说明:

布尔点点向前看,看看下一个元素是否包含“.”。如果是这样,我们在句子边界上,因此在当前单词后面添加了一个。如果没有,我们只需放置一个空格。如果我们在数组中的最后一个元素上,我们还会添加一个“.”。

输出:我很开心。Bob的名字是My。

 类似资料:
  • 问题内容: 我在程序中插入了一个字符串 怎样才能得到像这样的反向字符串 这是我面试中的一个面试问题。请任何人可以帮助我解决这个问题 问题答案: 拆分它,然后以相反的顺序将其添加到新的对象中。 打印:

  • 我正在尝试编写一个java程序,它可以反转句子中的每个单词。例如,如果句子是“Hello World.Hello Java”,输出应该是“olleH dlroW.olleH avaJ”。我可以反转,但我得到的输出是“olleH.dlroW olleH.avaJ”,即使是圆点也会反转,这是不应该发生的。谁能帮我修一下吗? 谢谢你!! 我试过这样的方法: 预期输出:olleH dlro. olleH

  • 本文向大家介绍Java程序可反转句子中的每个单词,包括了Java程序可反转句子中的每个单词的使用技巧和注意事项,需要的朋友参考一下 句子中的每个单词都可以颠倒,并以与以前相同的顺序显示单词。一个例子如下: 演示此过程的程序如下。 示例 输出结果 现在让我们了解上面的程序。 首先,显示原始字符串。然后,方法用于将所有单词存储在数组strWords []中。证明这一点的代码片段如下所示- 字符串rev

  • 问题内容: 我在Java中使用Joda-Time库。我在尝试将Period对象转换为“ x天,x小时,x分钟”格式的字符串时遇到了一些困难。 这些Period对象首先通过向它们添加一定数量的秒来创建(它们以秒为单位序列化为XML,然后从它们重新创建)。如果仅在其中使用getHours()等方法,则得到的全部为零,并且使用getSeconds 的总秒数。 如何让Joda计算相应字段(例如天,小时等)

  • 问题内容: 我将如何计算句子中的单词?我正在使用Python。 例如,我可能具有以下字符串: 那将是7个字。我在每个单词之后/之前以及涉及数字或符号时的随机空格有麻烦。 问题答案: 不带任何参数的空格字符将拆分: 从链接的文档中: 如果未指定 sep 或is ,则将应用不同的拆分算法:连续的空白行将被视为单个分隔符,并且如果字符串的开头或结尾处有空格,则结果在开头或结尾将不包含空字符串。

  • 问题内容: 这段代码在函数内部: 这是函数: 它无法正常工作,因为通过输入,我得到以下输出:。第一个字母丢失,循环停止,而不是越过空格到达句子的下一部分。 我正在努力实现这一目标: -> 问题答案: 根据原始帖子的修改,OP现在指示其目标是颠倒句子中单词的字母顺序,但将单词保留在其初始位置。 我认为,最简单的方法是利用String 函数,遍历单词并颠倒其顺序。 该方法定义为: 并将方法更改为: 原