Java Regex替换某个字符串中的模式

时间:2017-02-22 15:29:01

标签: java regex string replace

我想在一个字符串中替换以#开头的单词,该字符串包含具有相同单词的单词集(#ignored)

例如

" word1 word2 #user "应替换为" word1 word2 用户"

有人可以帮助我吗?

3 个答案:

答案 0 :(得分:5)

您可以使用正则表达式。让我们从

开始
yourText = yourText.replaceAll("#(\\S+)", "$1");

在正则表达式中:

  • \S代表任何非空白字符
  • +代表一个或多个
  • \S+代表一个或多个非空白字符
  • (\S+) -parenthesis创建包含一个或多个非空白字符的组,此组将被编入索引为1

替换

    替换
  • $1允许我们使用第1组的内容。

换句话说,它会尝试找到#non-whitespaces(将其替换为non-whitespaces部分。

但是这个解决方案并不需要#作为单词的开头。为此,我们可以检查#之前是否有

  • 空白空间\s
  • 或字符串^的开头。

为了测试某些内容是否在我们的元素之前,而不是在我们的匹配中实际包含它,我们可以使用look-behind (?<=...)

所以我们的最终解决方案看起来像

yourText = yourText.replaceAll("(?<=^|\\s)#(\\S+)", "$1");

答案 1 :(得分:0)

是的,String.replaceAll()

String foo = "#user"
foo = foo.replaceAll("#", "");

答案 2 :(得分:0)

你的用例并不是很清楚,但我的假设是用代码示例:

  1. 使用 replaceAll 功能
  2. 省略所有符号
  3. 使用 substring 函数

    省略第一个符号

    公共类TestRegex {

    public static void main(String[] args) {
    
        String omitInStart = "#user";
        String omitInMiddle = "#user";
        String omitInEnd = "#user";
        String omitFewSymbols = "#us#er";
    
        List<String> listForOmit = Arrays.asList(omitInStart, omitInMiddle, omitInEnd, omitFewSymbols);
        listForOmit.forEach(e -> System.out.println(omitWithReplace(e)));
    
        listForOmit.forEach(e -> System.out.println(omitFirstSymbol(e)));
    
    }
    
    private static String omitFirstSymbol(String stringForOmit) {
        return stringForOmit.substring(1);
    }
    
    private static String omitWithReplace(String stringForOmit) {
        String symbolForOmit = "#";
        return stringForOmit.replaceAll(symbolForOmit, "");
    }
    

    }