【问题标题】:Remove every special character except hyphen删除除连字符以外的所有特殊字符
【发布时间】:2013-09-10 07:50:16
【问题描述】:

我有两个字符串,例如“堆栈溢出”和“堆栈溢出”。 现在我正在研究一种字符串匹配方法,我需要格式化一些字符串。

每个特殊字符都应该是字符串的结尾,连字符除外。所以“Stack Overflow”会变成“Stack”,而“Stack-Overflow”会保持不变。

我已经使用了str.split(" ", 1)[0];、str.replaceAll("\\s", "") 和str.replaceAll("[^a-zA-Z0-9]", "");,但它与连字符不配合。

我应该使用什么替换方法?

【问题讨论】:

  • 你分配了吗?字符串在 Java 中是不可变的(replaceAll 返回一个字符串并且不会改变当前字符串)。
  • 我知道这一点。是的,我的所有字符串都已分配。
  • 你能发一个SSCCE吗?

标签: java string replace split formatting


【解决方案1】:

使用[^\\w-]+ 正则表达式

    String str = "Stack-Overflow";
    String str2 = str.split("[^\\w-]+")[0];     
    System.out.println(str2);

对于:Stack-Overflow 输出 Stack-Overflow

对于:Stack Overflow 输出 Stack

【讨论】:

    【解决方案2】:

    这是在 C# 中使用正则表达式的一种方法

    string regex = "[^a-zA-Z0-9-]";
    var s3 = Regex.Split(inputString, regex)[0];
    

    您也可以在 Java 中实现类似类型的代码。

    【讨论】:

      【解决方案3】:

      .split("\\W")[0] 似乎工作正常。

      这个

        System.out.println("Hello-World".split("\\W")[0]);
      

      只是从这里打印“Hello”,然后

        System.out.println("Hello World".split("\\W")[0]);
      

      做同样的事情,而

        System.out.println("Hello123123orld".split("\\W")[0]);
      

      如您所料,打印“Hello123123orld”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-22
        • 1970-01-01
        • 2014-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多