我正在尝试从字符串中删除破折号、下划线和多余的空格。下面是我试过的代码:public class Hello { public static void main(String args[]) { String blogName = "ABCD __________________________________________________ Size: 1234-5678 BAR 8956-7896 ---------- CAR 8756-2365"; String nameWithProperSpacing = blogName.replaceAll("\\s+", " ").replaceAll("-", "").replaceAll("_", ""); System.out.println( nameWithProperSpacing ); }}不过,我不希望它从单词和数字之间删除它们。例如,我当前的代码将 8956-7896 更改为 89567896。我想要的输出:ABCD Size:1234-5678 BAR 8956-7896 CAR 8756-2365
5 回答

LEATH
TA贡献1936条经验 获得超6个赞
您将需要使用前瞻和后视进行搜索
String nameWithProperSpacing = blogName
.replaceAll("(?<![a-zA-Z0-9])[-_](?![a-zA-Z0-9])", "") ///No -_ not inside a word
.replaceAll("\\s+", " "); /// only 1 space between words

梦里花落0921
TA贡献1772条经验 获得超6个赞
您可以使用非单词边界\B
来删除它们,但要做到这一点,您必须先删除下划线:
String nameWithProperSpacing = blogName.replaceAll("\\s+", " ").replaceAll("_+", "").replaceAll("\\B-+|-+\\B", "");

慕神8447489
TA贡献1780条经验 获得超1个赞
试试这个,不漂亮但适用于您的示例:
.replaceAll("\\s+", " ") .replaceAll("--", "").replaceAll("__", "").replaceAll(" _", "") .replaceAll("_ ", "").replaceAll(" -", "").replaceAll("- ", "") .replaceAll(" ", " ").trim();

斯蒂芬大帝
TA贡献1827条经验 获得超8个赞
另一个解决方案:
String nameWithProperSpacing = blogName.replaceAll("([^A-Za-z0-9])(\\-|\\s|_)+", "$1 ");
添加回答
举报
0/150
提交
取消