Java 8字符串处理-replaceFirst和replaceAll
在Java8中是否有更好的方法来实现这一点,例如使用(…)的Java 8字符串处理-replaceFirst和replaceAll,java,java-8,Java,Java 8,在Java8中是否有更好的方法来实现这一点,例如使用(…)的Stream.of if (messageBody.startsWith("\n\n")) { messageBody = messageBody.replaceFirst("\n", ""); } final String messageBodyFormatted = messageBody.replaceAll("\n", "<br />"); if(messageBody.startsWith(“\n\n”)
Stream.of
if (messageBody.startsWith("\n\n")) {
messageBody = messageBody.replaceFirst("\n", "");
}
final String messageBodyFormatted = messageBody.replaceAll("\n", "<br />");
if(messageBody.startsWith(“\n\n”)){
messageBody=messageBody.replaceFirst(“\n”和“);
}
最后一个字符串messageBodyFormatted=messageBody.replaceAll(“\n”和“
”);
这里有一个选项:
if (messageBody.startsWith("\n\n")) {
messageBody = messageBody.substring(1); // remove first newline
}
final String messageBodyFormatted = messageBody.replace("\n", "<br />");
if(messageBody.startsWith(“\n\n”)){
messageBody=messageBody.substring(1);//删除第一个换行符
}
最后一个字符串messageBodyFormatted=messageBody.replace(“\n”和“
”);
在if语句中,我只是删除第一个字符,因为我已经知道它是什么。如果你觉得这很微妙,就用你自己的版本吧。我用
replace()
更改了最后一个replaceAll()
——尽管它的名称相同,但只使用了正则表达式。您可以使用:replaceFirst(“\n(?=\n)”,”)来摆脱该条件代码>。我不认为Java 8会给你更多。这是否意味着你想让标题/尾随空格(而不是换行符)保持不变?@Maroun Maroun:这与startsWith
检查的语义不同,后者要求出现在字符串的最开头。解决了这个问题,就有了一个更简单的解决方案:replaceFirst(^\n\n,“\n”)
。事实上,java 8的盒子不需要打开。@JoopEggen,我同意。流很有趣,但我不想在这段代码中使用它们。Java 8中唯一不同的地方是使用Optionals代替if语句,即使如此,只有当您确实不喜欢定义变量时,它才有吸引力:Optional.of(messageBody.map(body->body.startsWith(“\n\n”)?body.substring(1):body.map(body->body.startsWith(“\n\n”)?body.substring(1):body.map(body->body.replace(“\n”,“
”).ifPresent(格式化->{/*执行操作*/})