我想在一个字符串中替换以#开头的单词,该字符串包含具有相同单词的单词集(#ignored)
例如
" word1 word2 #user "应替换为" word1 word2 用户"
有人可以帮助我吗?
答案 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 foo = "#user"
foo = foo.replaceAll("#", "");
答案 2 :(得分:0)
你的用例并不是很清楚,但我的假设是用代码示例:
使用 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, "");
}
}