Java 替换子字符串时如何避免重复替换字符

Java 替换子字符串时如何避免重复替换字符,java,replace,Java,Replace,我在数据库中有以下字符串 **final test project - test decorations** 我想用破折号替换空格(字符-)。这就是我到目前为止所做的: tit1 = rs.getString("title"); tit1 = tit1.replaceAll("\\s{1}", "-"); 输出结果如下所示 **final-test-project---test-decorations** **shadow-of-the-test----test** **final-t

我在数据库中有以下字符串

**final test project - test decorations**
我想用破折号替换空格(字符
-
)。这就是我到目前为止所做的:

tit1 = rs.getString("title");
tit1 = tit1.replaceAll("\\s{1}", "-");
输出结果如下所示

**final-test-project---test-decorations**
  **shadow-of-the-test----test**
**final-test-project-test-decorations**
   **shadow-of-the-test-test**
但我想要这样的输出

**final-test-project---test-decorations**
  **shadow-of-the-test----test**
**final-test-project-test-decorations**
   **shadow-of-the-test-test**

如何使替换忽略用空格包围的单破折号?

您可以使用以下行

tit1 = tit1.replaceAll("[\\s-]+", "-");

而不是调用
replaceAll
。它将所有连续的空格与破折号放在一起,并用一个破折号替换它们。

您可以使用以下行

tit1 = tit1.replaceAll("[\\s-]+", "-");

而不是调用
replaceAll
。它将所有连续的空格和破折号放在一起,并用一个破折号替换它们。

但是我得到的是我提到的相同输出。第二个可以请您澄清一下……@user1135693请您清楚地说明输入是什么,以及您希望得到什么。这个答案与您在下面所说的“我想要这样的输出”完全一致。事实上,我不明白你所说的“忽略单破折号”是什么意思。我得到了这个输出“测试的阴影----测试”,但我想要“测试的阴影----测试”单-无论在哪里我都可以得到----,-,----破折号我想要单-。感谢howard的早期回复,请看我的输入来自数据库**最终测试项目测试装饰**(有些字符串中有3或4或5个空格)我希望输出仅为3或4个空格的“最终测试项目测试装饰”的1个字符,就像这样,但同样的输出我得到了我提到的第2个字符,你能对此进行澄清吗?@user1135693你能清楚地说明输入是什么以及你希望得到什么吗?这个答案与你在下面所说的“我希望这样输出”完全一致。我实际上不明白你所说的“忽略单破折号”是什么意思。我得到了这个输出“测试的阴影----测试”,但我想要“测试的阴影----测试”单-无论在哪里我都可以得到----,,,--破折号我想要单-谢谢howard的早期回复请看我的输入来自数据库**最终测试项目测试装饰**(有些地方字符串中有3或4或5个空格)我希望3或4个空格的“最终测试项目测试装饰”的输出仅为1个字符,如下所示