android - Java replaceAll 将“null”放入结果中
问题描述
我有一个正则表达式:
((((first_url)|(second_url)|(third_url))+\.dom\.local)?|.*)[^.]
这应该检查我的 baseURL 是否是本地的。
如果我在正则表达式测试器站点(如正则表达式 101)中运行它,我会得到正确的结果,我的意思是如果我用“$2”替换,如果字符串中没有我的本地 baseURL 之一,我不会得到任何结果。
但是在Java中我得到:
String t1 = "first_url.dom.local/service/myService".replaceAll(Constants.REGEX_CHECK_GET_URL_LOCAL, "$2").replaceAll("null", "");
String tt1 = "first_url.dom.local/service/myService".replaceAll(Constants.REGEX_CHECK_GET_URL_LOCAL, "$2");
String t2 = "another_url.dom.local/service/myService".replaceAll(Constants.REGEX_CHECK_GET_URL_LOCAL, "$2").replaceAll("null", "");
String tt2 = "another_url.dom.local/service/myService".replaceAll(Constants.REGEX_CHECK_GET_URL_LOCAL, "$2");
在哪里:
t1 = "first_url.dom.local"
tt1 = "first_url.dom.localnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnullnull"
t2 = ""
tt2 = "nullnullnullnullnullnullnullnullnullnullnullnull"
为什么“replaceAll”将所有这些“null”放在字符串中?我通过再次替换“nulls”来解决,但我个人认为这是解决这个问题的不好方法。另外,如果我尝试在线“replaceAll”,我会得到没有“null”字符串的正确结果:/
使用“模式”和“匹配器”变量不会改变结果。
另一个例子:我有一个对象属性,它是头像的 url。此属性可以具有用于下载 avar 的 BaseURL,也可以具有不带 BaseURL 的相对 URL。
我的正则表达式是:
((www)\.(.*.)\.((it)|(com)|(org)))?.*.
替换:
$1
所以这应该只提取 BaseURL(如果存在)(就像我在在线模拟器上尝试的那样);相反,如果我有一个没有 BaseURL 的字符串,它会提取“null”字符串而不是空字符串“”。
解决方案
我们需要更多详细信息,因为您的错误不可重现。由于此测试完美运行:
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class ReplaceRegex {
@Test
void checkRegExp() {
String regex = "((((first_url)|(second_url)|(third_url))+\\.dom\\.local)?|.*)[^.]";
String t1 = "first_url.dom.local/service/myService".replaceAll(regex, "$2").replaceAll("null", "");
String tt1 = "first_url.dom.local/service/myService".replaceAll(regex, "$2");
String t2 = "another_url.dom.local/service/myService".replaceAll(regex, "$2").replaceAll("null", "");
String tt2 = "another_url.dom.local/service/myService".replaceAll(regex, "$2");
assertThat(t1).isEqualTo("first_url.dom.local");
assertThat(t1).isEqualTo(tt1);
assertThat(t2).isEqualTo("");
assertThat(t2).isEqualTo(tt2);
}
}
在 Open JDK12 上通过绿色。
你确定你导入的常量是正确的吗?
推荐阅读
- python - 在子列表中查找一个元素,当找到该元素时,将列表中的所有其他元素附加到另一个列表中
- c# - 针对 AD 组的 ASP.NET Core 5 MVC 上的 Windows 身份验证
- c++ - C++ 变量以及它们在内存中的存储位置(堆栈、堆、静态)
- excel - 数据透视表考虑重复元素进行平均计算
- python - 如何获得两条所需的路径?
- python - 在 CircleCI 工作流程中,Python 进程永远不会在 Docker 容器中退出
- file - 用户名未显示在 C:\Users 的 Windows 资源管理器中
- sql - INSERT 上的 SQL 错误:“关系不存在”/但不需要该表
- python - matplotlib 数据,带有点的单独标签和集合的颜色
- r - R:使用ggplot在x轴上连续缩放