java - 如何反转字符串中的单词但将标点符号保持在正确的位置?

标签 java string reverse

<分区>

我编写了以下代码来反转输入字符串:

  Scanner s = new Scanner(System.in);
  System.out.println("Please enter a sentence:");
  String sentence = s.nextLine();

  String[] words = sentence.split(" ");
  String reversedSentence = "";

  for(int i = words.length - 1; i >= 0 ; i--)
  {
      reversedSentence += words[i] + " ";
  }

  System.out.println(reversedSentence);

但是它没有给我想要的结果。我需要标点符号成为它所附单词的一部分,但仍要切换到单词的右侧。例如,如果您输入

“The quick brown fox jumps over the lazy dog”

我想要的输出是

“dog lazy the over jumps fox brown quick The”

我实际得到的是:

dog” lazy the over jumps fox brown quick “The

最佳答案

如果只是想处理输入首尾的双引号,只需将子串反转,后面再添加即可。例如

if (sentence.startsWith("\"") && sentence.endsWith("\"")) {
    sentence = sentence.substring(1, sentence.length()-1);
}

最后在拆分、反转和连接打印之后:

System.out.println('"' + reversedSentence + '"');

还有 2 个建议:

1) 您的 for 循环留下尾随空格。最后一个词不要加空格
2) 您应该使用 StringBuilder 来连接字符串。例如

StringBuilder reversedSentence = new StringBuilder();

for (int i = words.length - 1; i > 0; i--) {
    reversedSentence.append(words[i]).append(' ');
}
reversedSentence.append(words[0]);
System.out.println('"' + reversedSentence.toString() + '"');

关于java - 如何反转字符串中的单词但将标点符号保持在正确的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33899575/

相关文章:

java - 从 java 代码运行 shell 脚本

java - 日期格式验证不适用于 yyyy-MM-dd

python - 字符串中没有引号的字符串?

c - 如何使用C反转字符串?

java - 我如何安全连接到远程 websphere 服务器?

ArrayList 的 Java 数组 - 奇怪的事情发生了吗?

使任意字符串成为有效文件名的Python函数

java - 如何在 Java 中合并 2 个字符串数组,但保留重复项?

c++ - 使用递归从尾部开始反转链表

javascript - 反转平面坐标数组